QuerySql
-
Upload
wagner-pereira -
Category
Documents
-
view
220 -
download
0
Transcript of QuerySql
-
7/25/2019 QuerySql
1/71
Query SQL
Documentao SACI V7
-
7/25/2019 QuerySql
2/71
EAC SOFTWARE
GERNCIA DE SERVIOS E COORDENA!O DE TREINA"ENTOS
QuerySQL
#ELO $ORI%ONTE
-
7/25/2019 QuerySql
3/71
Con&en'e( T)*o+r,-)ca(
Ne+r)to: Palavras em negrito sero usadas para destacar os menus, opes e
mdulos do SACI, alm dos nomes EAC e SACI.
Itlico
: Palavras em itlico sero usadas para nomes de ar!uivos ou diretrios. "# : Este s$m%olo ser usado para comandos a serem e&ecutados no prompt do
'inu& ou opes de con(iguraes )comandos do .%as*+pro(ile por e&emplo.
As ta%elas apresentadas so compostas de duas colunas: Par-metros e pes /
0escrio. A coluna Par-metros de(ine o item apresentado no menu do mdulo.
Pode ser um item de con(igurao ou uma opo de seleo, como na gerao de
um relatrio. A coluna pes / 0escrio apresenta as opes dispon$veis para
escol*a em casos de seleo ou ento a e&plicao do item a ser con(igurado.
Cr./)to(
A reproduo ou transmisso por !ual!uer meio, se1a este eletr2nico, mec-nico,
(otocpia, gravao ou outros, s ser permitido com prvia autori3ao por escrito da
EAC So(t4are.
Cop5rig*t 6 7889 da EAC " Engen*aria Automao e ControleProdu3ido por EACSo(t4are
-
7/25/2019 QuerySql
4/71
Sum,r)o
. Como comear a montar um relatrio no SACI.................................................................;
.7 0e(inir o o%1etivo do relatrio.......................................................................................;
.< =iltro.............................................................................................................................;.> Colunas a serem impressas........................................................................................?
.@ E&erc$cio ...................................................................................................................9
7. Introduo a anco de 0ados...........................................................................................B
7. 0e(inies....................................................................................................................B
7.. 0ados...................................................................................................................B
7..7 a%ela...................................................................................................................B
7..< S.D..0. )Sistema Derenciador de anco de 0ados.......................................8
7..> C*ave .................................................................................................................
7.7 elacionamento entre a%elas..................................................................................7
7.< ipos de elacionamento...........................................................................................8.9"standard
5pe Q*elp]Q or Q^*Q (or *elp. 5pe Q^cQ to clear t*e %u((er.
m5s!l#
914 "o/o( /e Lo+ar no 5anco "ySQL
"# m5s!l Yenter# " 'oga diretamente no %anco G5S'
GM R SACI R 8
-
7/25/2019 QuerySql
19/71
914 "o/o( /e Lo+ar no 5anco "ySQL
"# m5s!l "A _%anco de dados` " 'oga no %anco utili3ando somente ta%elas do %anco
de dados in(ormado
"# m5s!l "A _%anco de dados` ""pagermore " 'oga no %anco permitindo !ue os
resultados das selects se1am apresentados na tela com opo de paginamento )similar ao
comando bmore no linu&
"#m5s!l Y ar!uivo.s!l " E&ecuta instrues G5S' contidas no ar!uivo ar!uivo.s!l
918 Coman/o(
odo comando digitado no cliente G5S' deve ser terminado pelo sinal QQ ] QQ )pontoe v$rgula
"# s*o4 data%ases] " E&i%e os %ancos de dados e&istentes
"# s*o4 ta%les (rom _data%ase`] E&i%e as ta%elas e&istentes para o %anco de dados
in(ormado
"# s*o4 columns (rom _ta%ela`] E&i%e as colunas da ta%ela in(ormada
"# create data%ase _nome+%anco`] Cria um novo %anco com o nome in(ormado
"# drop data%ase _nome+%anco`] 0eleta o %anco de dados in(ormado
"# auto riras* )auto complementar
"# parametro "A )m5s!l "A
"# desc _nome ta%ela`]
"# e&plain _nome ta%ela`]
"# pager less "S )e&i%e paginado
"# s*o4 inde& _ta%ela`] )e&i%e as c*ances da ta%ela
:1 Coman/o SELECT
Se (osse em PortuguOs este comando seria algo como:
SE'ECIME
F )colunas
0E FEG )ta%elas
MA CM0I )seleo
GM R SACI R 8
-
7/25/2019 QuerySql
20/71
:1 Coman/o SELECT
IMC'FIM0 FS )outras ta%elas
ADFPA0 P )agrupamento
IMC'FI SE INE )(iltro
0EMA0 P )ordenao
:10 S)nta;e
SE'EC
coluna, coluna7, ...
=G ta%ela, ta%ela7 _LIM`JKEE condio
DFP \ )coluna, ...
KANIMD )...
0E \ )coluna, ...
:14 E;em*2o( ()m*2e(
'ogar no cliente G5S' com a opo "A s!ldados ) m5s!l "A s!ldados Yenter#
SE'ECQQseu nomeQQ] Yenter#
SE'ECno, name =G custp] Yenter#
SE'ECno, name =G custp0E \ name] Yenter#
SE'ECno AS Codigo,name AS 0escricao=G custpJKEE name 'IfE Qa
Q0E \ name'IGI 78] Yenter#
GM R SACI R 8
-
7/25/2019 QuerySql
21/71
:18 O QuerySQL B E/)tar e E;ecutar SELECTS
:18 O QuerySQL B E/)tar e E;ecutar SELECTS
Esta (erramenta (oi criada para permitir aos usurios do EAC"SACI (or G5S'ela%orar relatrios diversos, aliando a velocidade do G5S' com recursos de (ormatao
do SACI.
Alm das (erramentas prprias do G5S', (oram desenvolvidas vrias outras
e&clusivas para este mdulo, (acilitando a ela%orao de SE'ECS pelo usurio.
Meste momento do curso estaremos utili3ando apenas a (acilidade de se editar e
e&ecutar SE'ECS atravs do uer5S'. Suas opes e&clusivas sero detal*adas
mais V (rente.
:19 Cr)ar uma no&a QuerySQL
Para criar uma nova !uer5, %asta teclar I )Inserir. asicamente, os primeiros
campos a serem preec*idos sero:
Ttu2o BIn(orme o nome do novo relatrio.
"3/u2oBIn(orme de !ual mdulo o relatrio ser acessado via YCtrlA #
Ar?u)&o SQL BIn(orme o endereo e o nome do ar!uivo para a criao da select.
ecomendamos !ue se1a padroni3ado o diretrio /u/saci/s!l como de(ault para ar!uivar as
selects.
Aps criada uma nova !uer5, posicione a %arra reversa so%re ela. Mo menu de
rodap da pgina esto dispon$veis as opes
E/)tor BPermite editar o ar!uivo da select, in(ormado na criao da !uer5. s
comando utili3ados so os do editor de te&tos padro do SACI, o ema&
E;ecutar BE&ecuta a select criada
GM R SACI R 8
-
7/25/2019 QuerySql
22/71
:1: E;ercc)o 9
:1: E;ercc)o 9
Insira uma nova !uer5 e, utili3ando os recursos de editor e e&ecutar, crie as selectsdos e&emplos vistos anteriormente
:1 a/ron)ao
U importante !ue o usurio ten*a o cuidado de padroni3ar a SE'EC, mantendo o
ar!uivo com as instrues de maneira !ue possa ser (acilmente entendido.
Fma %oa maneira de se comear optar pela letra maiscula para os comandos
SE'EC. E&emplo:
SE'EC
no, name =G custp
utra (orma interessante a identao. Cada comando em uma lin*a. E&emplo:
SE'EC
no AS Codigo,
name AS 0escrio
=G
custp
JKEE
name 'IfE QaQ
0E \
name
'IGI 78
Momear as colunas e ta%elas tam%m (undamental. Isso (eito atravs da
declarao AS. E&emplo:
GM R SACI R 8
-
7/25/2019 QuerySql
23/71
:1 a/ron)ao
no AS Codigo,
name AS 0escrio
:17 (o /o W$ERE
Pode ser usado com vrios par-metros de comparao, a seguir:
armetro( O*'e(H De(cr)o
Igual a
h 0i(erente de# Gaior !ue
Y Genor !ue
# Gaior igual
Y Genor !ue
EJEEM Entre
'IfE Fsado para campos tipo te&to
IM timi3ao
AM0/ E / F
E;em*2o(@
JKEE clno 888
JKEE empno h 88 AM0 Y 788>8
-
7/25/2019 QuerySql
24/71
-
7/25/2019 QuerySql
25/71
:1 Fun'e( SQL
:114 Fun'e( D)&er(a(
CONCAT
-
7/25/2019 QuerySql
26/71
:1 Fun'e( SQL
E&emplo:
SE'EC
'PA0)name,>8,QQ#QQ
=G custp
"ID
-
7/25/2019 QuerySql
27/71
:1 Fun'e( SQL
=aa uma select %uscando o cdigo, descrio e o preo de
venda dos produtos, e&i%indo o preo em (ormato de moeda
corrente )em eais, con(igurado no painel de criao do relatrio
ROND
-
7/25/2019 QuerySql
28/71
:1 Fun'e( SQL
E&emplo:
SE'EC
I=)t5pe , amtdue, Qeci%oQ
=G dup
CASE valor
JKEM _condio` KEM resultado
JKEM _condio` KEM resultado
E'SE resultado
EM0
Este comando avalia uma srie de condies para determinar o resultado. Guito
utili3ado para campos onde no e&istem descries gravadas em ta%elas no SACI, como
por e&emplo os tipos de pagamento utili3ados nos P0NS )din*eiro, c*e!ue, carto, etc.
E&emplo:
SE'ECCASE &alog7.&at5pe
JKEM 8
KEM QQ0in*eiroQQ
JKEM @
KEM QQCrediarioQQ
E'SE QQutrosQQ
EM0 AS QQipo PagamentoQQ=Gs!ldados.&alog7
:1M E;ercc)o :
Gonte uma select %uscando todos os clientes do SACI !ue possuam QQsilvaQQ no
nome
Gonte uma select %uscando todos os produtos !ue este1am cadastrados com o
GM R SACI R 8
-
7/25/2019 QuerySql
29/71
:1M E;ercc)o :
centro de lucro 888
'iste o total de vendas da lo1a para o mOs de 1aneiro de 7887
'iste os valores totais em a%erto para duplicatas e reci%os para a lo1a 7 e emitidos
no ano de 788
1 Re2ac)onan/o Ta5e2a(
Ma maioria dos casos, para !ue se o%ten*a o resultado dese1ado em uma SE'EC, necessrio !ue a consulta se1a (eita em mais de uma ta%ela. Mestes casos, as ta%elas
devem ser relacionadas.
elacionar ta%elas signi(ica un$"las atravs de um ou mais campos em comum.
Mestas situaes, o usurio dever sempre o%servar as c*aves das ta%elas,
visando a mel*or (orma de relacion"las.
Por e&emplo, imagine uma SE'EC simples onde devem ser listados o nome do
produto e o nome do centro de lucro a !ue o produto pertence.s dados do produto esto na ta%ela prd, inclusive !ual o nmero do centro de
lucro cadastrado para ele. Porm a descrio deste centro de lucro est na ta%ela onde
so cadastrados os centros de lucro, a ta%ela cl. A SE'EC (icaria ento:
SE'EC
prd.no AS Codigo,
prd.name AS 0escrio,
cl.name AS QCentro 'ucroQ
=G
s!ldados.prd, s!ldados.cl
JKEE
prd.clno cl.no
A este tipo de relacionamento c*amamos de 1oin plena.
GM R SACI R 8
-
7/25/2019 QuerySql
30/71
1 Re2ac)onan/o Ta5e2a(
U importante (icar atento em relao as 1oins. Con(orme a maneira !ue uma
SE'EC (eita, a 1oin pode resultar em um produto cartesiano entre as ta%elas
relacionadas, ou se1a, para cada registro lido da ta%ela mestre, sero lidos todos os
registros da ta%ela relacionada. Imagine esta situao entre duas ta%elas grandes, como
por e&emplo &alog7 e custp....
10 LEFT OIN
Fma 'E= LIM retorna todas as lin*as da ta%ela es!uerda em um
relacionamento, independente de *aver ou no relacionamento com a ta%ela da direita.Por e&emplo, em uma relao entre a ta%ela de clientes e c*e!ues pr"datados.
o%1etivo listar todos os clientes e, se *ouver, o total de c*e!ues pr"datados
cadastrados com seu nome.
SE'EC
custp.name AS Cliente,
SFG)cpdue.amt AS C*e!ue
=G
s!ldados.custp
'E= LIM
s!ldados.cpdue M
custp.no cpdue.custno
DFP \
custp.no
14 E;ercc)o
Gonte um relatrio com cdigo do vendedor, nome do vendedor e valor total de
vendas para lo1a e ano de 7887
GM R SACI R 8
-
7/25/2019 QuerySql
31/71
18 Ver)-)can/o con()(tnc)a em ta5e2a( B a)( (em -)2>o( e -)2>o(
(em *a)
18 Ver)-)can/o con()(tnc)a em ta5e2a( B a)( (em -)2>o( e -)2>o( (em
*a)
Em algumas situaes podem ocorrer inconsistOncias entre as ta%elas do SACI,
onde os registros da ta%ela pai so retirados mas os registros da ta%ela (il*o no
)registros retirados via uer5 por e&emplo. Atravs de SE'ECS poss$vel identi(icar
(acilmente estes registros. Por e&emplo, imagine uma pes!uisa onde vamos identi(icar
!uais registros da ta%ela eoprd )ta%ela (il*o no possuem relacionais na ta%ela eord
)ta%ela pai.
SE'EC
I=MF'')eord.storeno,8 AS 'o1a+pedido,
eord.ordno AS Pedido+pedido,
eoprd.storeno AS 'o1a+produto,
eoprd.ordno AS Pedido+produto
=G
s!ldados.eoprd
'E= LIM
s!ldados.eord M
eord.storeno eoprd.storeno AM0
eord.ordno eoprd.ordno
JKEE
eord.storeno IS MF''
19 E;ercc)o 7
Gonte uma SE'EC para identi(icar se e&iste inconsistOncia entre contratos e
parcelas do credirio.
GM R SACI R 8
-
7/25/2019 QuerySql
32/71
71 O QuerySQL
71 O QuerySQL
Esta (erramenta (oi criada para permitir aos usurios do EAC"SACI (or G5S'
ela%orar relatrios diversos, aliando a velocidade do G5S' com recursos de (ormatao
do SACI. Assim, de !ual!uer mdulo do sistema ser poss$vel e&ecutar estes relatrios
atravs da tecla de atal*o Y Ctrl A #, ou ento diretamente no mdulo uer5S' "
i%lioteca. acesso ser con(igurado para cada usurio, semel*ante as outras opes do
SACI.
Alm das (erramentas prprias do G5S', (oram desenvolvidas vrias outras
e&clusivas para este mdulo, (acilitando a ela%orao de QQ selects QQ pelo usurio.
710 Con-)+ura'e(
ar!uivo e&ecutvel para o uer5S' o !s!l e a ta%ela correspondente a
s!le&e. Cada !uer5 criado ter um ar!uivo"te&to correspondente, onde ser digitada a X
select X correspondente a ele. A sugesto da EAC !ue se1a criado o diretrio /u/saci/s!l
para arma3enamento dos ar!uivos de X selects X.
am%m, a (im de manter um certo padro e organi3ao, todo ar!uivo de X select X
dever ter a e&tenso .s!l
714 a((o( *ara a con-)+urao
. Criar o diretrio /u/saci/s!l ) logado como eacadm
"#)eacadm # mWdir /u/saci/s!l YEnter#
7. Acerto de varivel de am%iente:Edite o ar!uivo /*ome/usuario/.%as*+pro(ile e
acrescente a varivel de am%iente:
"# e&port SACI+FE\S'/u/saci/s!l/ 0esta (orma, o campo Ar!uivo S' nos
par-metros de con(igurao de cada !uer5 ser preenc*ido automaticamente com o
camin*o do diretrio onde (icam as s!ls )/u/saci/s!l/
GM R SACI R 8
-
7/25/2019 QuerySql
33/71
714 a((o( *ara a con-)+urao
-
7/25/2019 QuerySql
34/71
719 Fun'e( /o "enu B QuerySQL
"o/)-)car B Godi(ica par-metros de con(iguraes da !uer5
Ret)rar Betira uma !uer5
E/)tar BEdita o ar!uivo onde esta a !uer5
E;ecutar BE&ecuta a !uer5 selecionada pela %arra reversa
E(c BSai do mdulo
71: Cr)ar uma no&a QuerySQL
Para criar uma nova !uer5, %asta teclar I )Inserir. asicamente, os primeiros
campos a serem preec*idos sero:
Ttu2o BIn(orme o nome do novo relatrio.
"3/u2oBIn(orme de !ual mdulo o relatrio ser acessado via YCtrl A#
Ar?u)&o SQL B In(orme o endereo e o nome do ar!uivo para a criao da X
select X. ecomendamos !ue se1a padroni3ado o diretrio /u/saci/s!l como de(ault para
ar!uivar as X selects X.
Im*r)me Ca5ea2>o B0e(ine se o ca%eal*o padro do SACI ser impresso ou
no. Caso (aa a opo por no imprimir o ca%eal*o, o uer5S' e&i%e somente o
resultado da X select X, sem os nomes das colunas. Ideal para e&portar o resultado para
outros programas, como planil*as eletr2nicas.
NPmero /e Co2una( BEscol*a entre 98 ou
-
7/25/2019 QuerySql
35/71
71: Cr)ar uma no&a QuerySQL
Con/en(a/o B0e(ine se o relatrio ser impresso com (onte condensada ou
normal.
Re2at3r)o *o((u) Su5Ttu2o B Deralmente so usados neste campo alguns
par-metros de seleo para o relatrio, como per$odo, lo1a, etc. %serve !ue estes
campos so as QQ variveis de inter(aceQQ da X select X. Para !ue se1am impressos, in(orme
estas variveis na mesma ordem em !ue aparecem na X select X, seguindo uma
numerao se!uencial entre c*aves. Ne1a o e&emplo a%ai&o:Considere a X select X:
SE'EC SFG)amt " discount AS otal+Nendas =G s!lpdv.p&a
JKEE date # j:d:0ata Inicialk AM0 date Y j:d:0ata =inalk AM0 storeno j:store:In(orme a 'o1ak
In(orme o Su% $tulo com o (ormato:
Per$odo: j8k At jk " 'o1a j7k
Re2at3r)o t)*o "e(treHDeta2>e BSimilar ao recurso de usar dois la5"outs no
uer5 convencional, possi%ilita (ormatar o relatrio de maneira !ue a in(ormao XmestreX
(i!ue separada das in(ormaes Xdetal*eX. Ao selecionar Sim para esta opo, uma nova
inter(ace e&i%ida, onde devero ser in(ormadas as colunas !ue de(inem o mestre
)separadas por v$rgula. Em seguida, in(orme o tipo de impresso, se os detal*es sero
na mesma lin*a ou a%ai&o das in(ormaes do mestre. Ne1a a%ai&o e&emplos de acordo
com cada con(igurao:
Considere uma X select X !ue liste duplicatas por vendedor:
O*o 0@
elatrio tipo Gestre/0etal*e # M
resultado seria algo como:
GM R SACI R 8
-
7/25/2019 QuerySql
36/71
71: Cr)ar uma no&a QuerySQL
No Ven/ Nome Ven/e/or Du*2)cata( Va2or Data
o%erto Carlos 7/ ,88
-
7/25/2019 QuerySql
37/71
71: Cr)ar uma no&a QuerySQL
Nend.
Re2at3r)o *o((u) Su5 Que5ra@Possi%ilita uma nova !ue%ra dentro de uma 1
e&istente. Meste caso ser gerado um su%"total automaticamente em cada su%"!ue%ra.
In(orme em !ual coluna ser (eita a su% !ue%ra e se os su%totais sero com lin*as
separadoras. Mo e&emplo acima, caso a su% !ue%ra (osse (eita na coluna QQ 0ata QQ, o
resultado seria:
No Ven/ Nome Ven/e/or
Du*2)cata( Va2or Data o%erto Carlos
7/ ,88 @e)ro@ Para colunas do tipo QQ din*eiro QQ, no
necessrio !ue a (ormatao se1a (eita pela X select X )diviso da string por 88 a (im de
acertar a preciso de casas decimais. asta in(ormar neste campo !uais as colunas e o
uer5S' (a3 a (ormatao correta. Somente em casos de (rmulas do tipo QQ !uantidade
preo QQ )ta%ela &alog7 por e&emplo, dever ser usada a diviso por 888 no campo QQ!uantidade QQ.
Co2una( em Formato Quant)/a/e@Para colunas do tipo QQ !uantidade QQ, no
necessrio !ue a (ormatao se1a (eita pela X select X. asta in(ormar neste campo !uais
as colunas e o uer5S' (a3 a (ormatao correta.
GM R SACI R 8
-
7/25/2019 QuerySql
38/71
71: Cr)ar uma no&a QuerySQL
Co2una( em Formato $ora@Para colunas do tipo QQ *ora QQ, no necessrio !ue
a (ormatao se1a (eita pela X select X. asta in(ormar neste campo !uais as colunas e o
uer5S' (a3 a (ormatao correta.
Co2una( com Tota2)ao@Meste campo in(orme !uais as colunas devem ser
totali3adas pelo uer5S'. Se (or in(ormado X!ue%raX, as colunas sero totali3adas a
cada !ue%ra.
Co2una( com C,2cu2o /e "./)a@Este campo (a3 a mdia simples da coluna
indicada, dividindo o valor total da coluna peno nmero de lin*as de cada !ue%ra.
Tota)( com L)n>a( Se*ara/ora(@ 0e(ine se imprime ou no uma lin*a
separadora aps cada su%total.
Tota2)ao Gera2 /o( Cam*o(@0e(ine se imprime o total geral para colunas de
valores e !uantidades.
71 Var),&e)( /e ConteP/o
Fma srie de recursos e&tras (oram implementados neste mdulo, visando (acilitar
a ela%orao das !ueries. Entre estes recursos esto as Nariveis de Contedo, !ue so
variveis de datas e *oras, geralmente usadas nas condies XJKEEX. So elas:
ONTE" Betorna a data de MEG no (ormato 5555mmdd
$OE Betorna a data de KLE no (ormato 5555mmdd
A"AN$A Betorna a data de AGAMKA no (ormato 5555mmdd
$ORA Betorna a KA atual n )n segundos aps 88:88
GM R SACI R 8
-
7/25/2019 QuerySql
39/71
71 Var),&e)( /e ConteP/o
ANO"ES Betorna o AM/GS atual no (ormato 5555mm
INICIO"ES Betorna o primeiro dia do mOs atual no (ormato 5555mmdd
FI""ES Betorna o ltimo dia do mOs atual no (ormato 5555mmdd
INICIOANO Betorna o primeiro dia do ano atual no (ormato 5555mmdd
FI"ANO B etorna o ltimo dia do ano atual no (ormato 5555mmdd
TA#ELA BFsado para ta%elas temporrias
LISTA0 BFsado para comandos Select+'ist
717 Var),&e)( /e Inter-ace
Fsadas !uando se !uer in(ormar uma condio para a e&ecuo da !uer5, por
e&emplo um per$odo determinado, ou uma lo1a espec$(ica, etc. Para as variveis !ue so
c*ave nas ta%elas, e&iste ainda o recurso das teclas =7 )consulta pela descrio ou =.8.; o G5S' no possui SF"SE'ECs. Com isso, torna"se
necessrio e(etuar 7 X selects X separadas para se o%ter o resultado dese1ado em alguns
casos. Ainda assim, pode se tornar muito complicado ela%orar uma X select X otimi3ada a
partir de uma X select X original.
comando SE'EC+'IS (oi criado para resolver esses casos. =uncionando
dentro de um comando temporrio, o SE'EC+'IS prepara uma lista de valores para ser
usado em con1unto com o comando IM da linguagem S', cu1o uso %astante otimi3ado
pelo G5S'.
Ne1a o e&emplo a%ai&o:
%1etivo do elatrio:
'istar os clientes somente das lo1as ativas in(ormadas no cadastro de 'o1as.
GM R SACI R 8
-
7/25/2019 QuerySql
43/71
71 Coman/o Se2ectL)(t
SE'EC+'IS no
=G s!ldados.store
JKEE active
0E \ no
SE'EC no, name
=G s!ldados.custp
JKEE storeno IM )_'ISA`
0E \ storeno,name
E&plicando o relatrio acima:
A primeira X select X temporria )o comando est entre QQ QQ e uma X select X
especial: SE'EC+'IS. Isso sinali3a para o uer5S' !ue dever ser gerada uma lista
com valores para serem usados em con1unto com o comando IM. %servaes:
comando SE'EC+'IS no e&iste na linguagem S' " apenas o uer5S'
entende esse comando.
Mo comando SE'EC+'IS, apenas a primeira coluna ser considerada para se
criar a lista. Se no e&emplo acima (osse usado XSE'EC+'IS name, noX seria criada
uma lista com os nomes das lo1as, e no o nmero. Portanto, os comandos do tipo
XSE'EC+'ISX devem listar apenas um campo, e esse campo !ue ser usado para
compor a lista.
GM R SACI R 87
-
7/25/2019 QuerySql
44/71
71 Coman/o Se2ectL)(t
A segunda X select X (a3 uso da lista criada na primeira X select X, atravs da
varivel _'ISA`. Como podem e&istir at 9 X selects X temporrias, ser poss$vel criar
uma lista para cada X select X. 'ogo, a varivel _'ISA` pode variar de _'ISA` at
_'ISA9`. Mo e&emplo acima, se as lo1as ativas (orem as de nmero , 7, >, @, 8 e 7, a
varivel _'ISA` ter o seguinte contedo: , 7, >, @, 8, 7. Para o uer5S' portanto, a
X select X (inal ser e&ecutada da seguinte (orma:
SE'EC no, name
=G s!ldados.custp
JKEE storeno IM ),7,>,@,8,7
0E \ storeno, name
Como o comando IM otimi3ado no G5S', pode"se o%ter um e(eito %astante
positivo em termos de per(ormance preparando"se primeiro uma lista de valores atravs
do comando SE'EC+'IS.
71M Seo /e Var),&e)(
am%m poss$vel de(inir uma seo de variveis dentro da X select X. A idia
permitir !ue as variveis de inter(ace possam ser usadas dentro do comando S'
repetidas ve3es, mas !ue na inter(ace se1am in(ormadas uma nica ve3. A de(inio das
variveis segue um la5"out especi(ico, demonstrado no e&emplo de X select X a%ai&o:
vars
[dataI j:d:0ata Inicialk
[data= j:d:0ata =inalk
GM R SACI R 8
-
7/25/2019 QuerySql
45/71
71M Seo /e Var),&e)(
SE'EC
dup.dupno AS Mumero,
dup.issuedate AS Emissao,
dup.duedate AS Nencimento
=G s!ldados.dup
JKEE )dup.issuedate # _[dataI` AM0 dup.issuedate Y _[data=`
)dup.duedate # _[dataI` AM0 dup.duedate Y _[data=`
Mo e&emplo acima, sero listadas todas as duplicatas cu1as datas de emisso ou
datas de vencimento este1am dentro do per$odo in(ormado. Perce%a !ue as variveis QQ
0ata InicialQQ e QQ0ata =inalQQ (oram utili3adas dentro do comando S' mais de uma ve3,
mas no momento da e&ecuo do relatrio ser necessrio in(orm"las apenas uma nica
ve3.
O5(er&a'e(@
A seo de variveis deve comear o%rigatoriamente com a palavra QQ vars QQ
)sem as aspas e essa palavra deve estar sempre na primeira lin*a do ar!uivo
oda varivel deve ser declarada com o sinal QQ [ QQ na (rente, seguido do nome da
varivel, do sinal de igualdade )com ou sem espaos e da de(inio da varivel
uer5S' (ar a distino de variveis maisculas e minsculas. Isso signi(ica
!ue [0ataI e [dataI so 7 variveis di(erentes
GM R SACI R 8>
-
7/25/2019 QuerySql
46/71
71M Seo /e Var),&e)(
A seo de variveis deve o%rigatoriamente terminar com o sinal QQ QQ )sem as
aspas
A varivel deve ser utili3ada dentro do comando S' envolvida em colc*etes
) _[dataI` por e&emplo. Isso indica para o uer5S' !ue estaremos tratando de variveis
de inter(ace de(inidas na seo de variveis
710 SELECTVARS B
-
7/25/2019 QuerySql
47/71
710 SELECTVARS B
-
7/25/2019 QuerySql
48/71
710 SELECTVARS B
-
7/25/2019 QuerySql
49/71
7100 Ta5e2a( Tem*or,r)a(
antes e depois da primeira X select X, e a varivel _ta%ela` usada no 1oin com a ta%ela
store.
SE'EC
store.no AS lo1a,
stW.prdno AS cod,
sum)stW.!tt5+atacado AS total
=G s!ldados.store
'E= LIM s!ldados.stW
M )store.nostW.storeno
DFP \ stW.storeno,stW.prdno
KANIMD total # 8
SE'EC
store.no AS 'o1a,
SFG)_ta%ela`.total AS otal
=G s!ldados.store
'E= LIM _ta%ela`
M )store.no _ta%ela`.lo1a
DFP \ store.no
7104 Gerar Re2at3r)o( em Formato 1*/-
s relatrios gerados pelo uer5S' podem ser salvos em (ormato .pd(. Para
GM R SACI R 89
-
7/25/2019 QuerySql
50/71
7104 Gerar Re2at3r)o( em Formato 1*/-
utili3ar este recurso o%serve as seguintes condies:
Neri(icar a e&istOncia da ta%ela prntr7, onde (icam arma3enados os relatrios
gerados neste (ormato. Caso no possua esta ta%ela em seu %anco de dados, entre em
contato com a EAC para o%tO"la ou ento (aa o do4nload diretamente em
*ttp://444.eacnet.com.%r/do4nload
Ka%ilite esta opo na Con(igurao Deral do Sistema, Dera =ormato P0=
elatrios uer5S'
Com esta opo *a%ilitada, veri(i!ue em cada impressora cadastrada no SACI, na
ltima tela de in(ormaes, a%ai&o da edio das escape se!uences, a opo Imprime
(ormato P0=. espondendo Sim V esta pergunta ser poss$vel in(ormar os seguintes
par-metros para a impresso em P0=: " ipo de =onte )$tulo " 0e(ine a (onte para a
impresso do t$tulo do relatrio " aman*o da =onte )$tulo " 0e(ine o taman*o da (onte
para a impresso do t$tulo do relatrio " ipo da =onte )Corpo " 0e(ine a (onte para a
impresso das lin*as do relatrio" aman*o da =onte )Corpo " 0e(ine o taman*o da (ontedas lin*as do relatrio" aman*o da Pgina " A>, 'egal ou Carta" rientao da Pgina "
etrato ou Paisagem " Espaamento entre 'in*as " 0e(ine o espaamento entre lin*as
)em pi&els. Nalor da(ault ? " Gargem Kori3ontal e Gargem Nertical " 0e(ine as margens
*ori3ontal e vertical )em pi&els. Nalor de(ault 78" Ar!uivo de logotipo " 0e(ine a imagem
!ue poder ser impressa no canto superior es!uerdo da pgina. A imagem deve ser
!uadrada, para !ue a impresso possa sair correta. Se a empresa no dese1a imprimir
nen*uma imagem, %asta in(ormar um nome invlido nesse campo )a palavra QQnadaQQ pore&emplo.
Mo (inal da gerao de cada relatrio gerado pelo uer5S' ser e&i%ida a opo
pd( no menu de rodap, 1unto com imprime, consulta, etc. Esta opo !ue e(etivamente
(ar a gerao do relatrio em (ormato .pd(.
diretrio de(ault para a gerao dos ar!uivos .pd( pode ser de(inida via
con(igurao de varivel de am%iente. Caso no se1a de(inida esta varivel, os ar!uivos
GM R SACI R 8B
-
7/25/2019 QuerySql
51/71
7104 Gerar Re2at3r)o( em Formato 1*/-
sero gerados no mesmo diretrio para impresso de ar!uivos comuns )/print.
A lin*a para de(inio desta varivel de am%iente :
"# SACI+P0=/u/saci/pd(
Meste caso a sugesto criar um diretrio c*amado pd( para este (im.
7108 Gerao /e Et)?ueta(
am%m poss$vel gerar eti!uetas pelo uer5S'. Para de(inir !ue a impresso
ser neste (ormato, responda Sim a opo Impresso em (ormato Eti!ueta.
Aps in(ormar Sim, sero apresentadas > opes !ue de(inem o taman*o daeti!ueta, sendo:
No1 /e Co2una( /e Et)?ueta( B0e(ine em !uantas colunas sero impressas as
eti!uetas.
Taman>o /a Et)?ueta a( entre Et)?ueta( BMeste caso so o nmero de lin*as !ue devem
ser QQpuladasQQ para iniciar a impresso da pr&ima eti!ueta. U a dist-ncia vertical entre
eti!uetas.
la5"out da eti!ueta de(inido pela prpria SE'EC e para um nico registro,
independentemente do nmero de colunas de(inido na con(igurao acima. Alm disso,
preciso especial ateno ao campo de separao de lin*as, pois ele de(ine o !ue ser
GM R SACI R 8
-
7/25/2019 QuerySql
52/71
7108 Gerao /e Et)?ueta(
impresso em cada lin*a. E&emplo de SE'EC:
SE'EC
no, name, X^nX as X^nX,
add, X^nX as X^nX,
CMCA)cit5,Q/Q, state, X^nX as X^nX
=G
s!ldados.custp
0E \
nameA SE'EC acima imprime uma eti!ueta de clientes no seguinte (ormato )supondo 7
colunas:
7 C'IEME EEGP' A 7
-
7/25/2019 QuerySql
53/71
7109 E;ercc)o
Produtos do Centro de 'ucro 888, Nendas para a lo1a e per$odo de vendas entre
8/8/7887 at
-
7/25/2019 QuerySql
54/71
14 Se2eo /e re+)(tro( /o t)*o 5)t
registro no Cadastro de Produtos.
Fm campo do tipo %it composto de ; 3eros ou uns, sendo !ue cada um deles
de(ine uma particularidade para o registro. A identi(icao deles se d (a3endo a leitura da
direita para a es!uerda, comeando do 3ero at o !uin3e. Mo caso do produto (ora de
lin*a, o %it responsvel por esta de(inio o %it 7 )contando da direita para a es!uerda,
comeando do 3ero.
3ero) 8 signi(ica QQ desligado ou no QQ e o um ) signi(ica QQ ligado ou simQQ .
A%ai&o, modelo de um campo do tipo %its do cadastro de produtos ) campo dereg .
%serve !ue o segundo %it est ligado ) , portanto o produto est (ora de lin*a.
88888888888888
E&istem vrias alternativas para a montagem de selects com este tipo de campo,
como nos e&emplos a%ai&o, todos o%1etivando produtos (ora de lin*a.
Caso o usurio !ueira especi(icar apenas dentre os ; %its %asta in(ormar a sua
posio, de 8 a @, elevando"a ao !uadrado. )%it !ue de(ine se o produto est (ora delin*a 7 "# 77"# > . Meste e&emplo sero listados somente produtos (ora de lin*a.
SE'EC
prd.no, prd.name
=G s!ldados.prd
JKEE )prd.dereg >
mesmo e&emplo acima, porm e&cluindo"se produtos (ora de lin*a.
SE'EC
prd.no, prd.name
=G s!ldados.prd
GM R SACI R 8
-
7/25/2019 QuerySql
55/71
14 Se2eo /e re+)(tro( /o t)*o 5)t
JKEE M )prd.dereg >
Ainda no mesmo e&emplo, caso o usurio no !ueira (a3er a conta QQ posio do
%it ao !uadradoQQ , poder (a3er uso do recurso po4, como no e&emplo a%ai&o.
SE'EC
prd.no, prd.name
=G s!ldados.prd
JKEE M )prd.dereg PJ)7, & " nde & igual a posio do %it
Caso o usurio !ueira especi(icar vrios dentre os ; %its. underline (unciona
como meta"caractere no QQ'IfEQQ do G5S'. Meste e&emplo sero listados somente
produtos !ue no esto (ora de lin*a.
SE'EC
prd.no, prd.name
=G s!ldados.prd
JKEE 'PA0)%in)dereg,;,X8X liWe X+++++++++++++8+X
usurio poder usar o underscore como meta"caractere ao in(ormar o valor da
varivel jitsk .Meste e&emplo tam%m est sendo utili3ado a seo de variveis, comde(inio do valor de(ault e o%rigatoriedade do campo )Narivel its, taman*o ;, Nalor
de(ault ++++++++++++++++] Preenc*imento %rigatrio Sim.
vars
[its jits,;]++++++++++++++++]Sk
GM R SACI R 8
-
7/25/2019 QuerySql
56/71
14 Se2eo /e re+)(tro( /o t)*o 5)t
SE'ECprd.no, prd.name
=G s!ldados.prd
JKEE lpad)%in)dereg,;,X8X liWe X_its,;`X
18 E(tat(t)ca( /e u(o /e Re2at3r)o(
vare1o muito din-mico em suas necessidades. Sendo assim, a ela%orao de
relatrios espec$(icos uma tare(a !uase !ue diria.
Com o tempo a tendOncia natural !ue o nmero de relatrios v aumentando,
sendo !ue muitos deles perdem a (uno. Por e&emplo, uma determinada campan*a de
vendas (oi criada, e 1unto os relatrios espec$(icos de acompan*amento. uando esta
campan*a termina, os relatrios continuam dispon$veis, porm sem utili3ao prtica.
resultado disto !ue a visuali3ao dos relatrios dispon$veis e sua conse!ente
procura se tornam mais lentos, tra3endo transtornos para os usurios. Administrador do SACI pode ento, atravs do prprio uer5S' veri(icar !uais
relatrios esto sendo utili3ados e por !uais usurios, permitindo !ue a!ueles no
utili3ados possam ser retirados do editor.
Ma ta%ela s!luser, temos uma relao entre o nmero do relatrio e o nmero do
usurio com acesso a ele. Mo campo au&S*ort sero acumulados o nmero de ve3es
em !ue o relatrio (oi e&ecutado pelo usurio correspondente. Assim, o Administrador
poder veri(icar este nmero atravs de relatrios desenvolvidos pelo prprio uer5S'.
1810 a((o( *ara )m*2antao /e(te recur(o
A primeira condio !ue o SACI este1a con(igurado para utili3ar o Controle de
Fsurios no uer5S'. =ica em Con(igurao Deral do Sistema, In(ormaes Derais,
Ftili3a Controle de Fsurios no uer5S' . Gar!ue Sim nesta opo.
GM R SACI R 8
-
7/25/2019 QuerySql
57/71
18 E(tat(t)ca( /e u(o /e Re2at3r)o(
controle (eito por usurio do SACI, sendo assim, importante !ue este
controle este1a sendo reali3ado corretamente no sistema, ou se1a, para cada cola%orador
da empresa com acesso ao SACI deve e&istir um usurio correspondente.
Para o usurio nmero " Administrador do Sistema no *aver estat$stica de
utili3ao.
E&emplo de Select para veri(icar a estat$stica de uso de um relatrio. Ao e&ecutar,
in(orme o nmero do relatrio a ser pes!uisado.
vars
[rl j:s:Mo elatriok
SE'EC
s!luser.userno AS Cod,
users.name AS Mome,
s!luser.au&S*ort AS E&ecucoes
=G
s!ldados.s!luser, s!ldados.users
JKEE
s!le&eno _[rl` AM0
s!luser.userno users.no
M1 Ot)m)ao /e SELECTS
G5S' possui um otimi3ador interno. Em alguns casos ele e&ecuta a SE'EC
de maneira totalmente di(erente da !ue ac*amos !ue ele (a3.
GM R SACI R 8
-
7/25/2019 QuerySql
58/71
M1 Ot)m)ao /e SELECTS
Fma %oa maneira de estudar as opes de otimi3ao a utili3ao do comando
e&plain. 0e uma maneira resumida, este comando e&plica o camin*o !ue o G5S' (ar
para e&ecutar a SE'EC.
Sinta&e:
EP'AIM SE'EC ....
esultados )do mel*or para o pior
armetro( O*'e(H De(cr)o
s5stem Fma nica lin*a ser lidaconst Mo m&imo lin*a
e!+re( elao /, ideal para LIM
re( Guitas lin*as podem ser lidas
range 'in*as na (ai&a selecionada
inde& oda a c*ave ser lida
A'' oda a ta%ela ser lida
otimi3ador do G5S' tentar usar sempre as c*aves das ta%elas, porm, se
vocO 1 con*ece as ta%elas e tem e&ata noo do !uO deve ser pes!uisado, pode gan*ar
algum tempo na e&ecuo di3endo ao G5S' como dever ser a pes!uisa, ou !uais
c*aves devero ser utili3adas.
uso do comando e&plain antes do comando SE'EC retorna a anlise (eita pelo
otimi3ador G5S'. E&emplos:
EP'AIM SE'EC Z =G &alog7 JKEE date # 8]
GM R SACI R 8
-
7/25/2019 QuerySql
59/71
M1 Ot)m)ao /e SELECTS
Este resultado in(orma !ue todas as lin*as da ta%ela esto sendo lidas )t5pe A''
e no e&istem opes de utili3ao de c*aves )possi%le+We5s MF'', isto por!ue no
e&iste uma c*ave date na ta%ela
EP'AIM SE'EC Z =G &alog7 JKEE storeno # 8]
Meste caso, o otimi3ador do G5S' est nos in(ormando !ue, apesar de ler a
ta%ela toda )t5pe A'', seria poss$vel a leitura V partir das c*aves primria, i7, i@, i8, i
e i7 )estas c*aves possuem o campo date. A leitura (eita na ta%ela toda por!ue a
condio in(ormada na clusula JKEE condiciona o nmero da lo1a se1a maior !ue 8
)3ero
EP'AIM SE'EC Z =G &alog7 JKEE storeno # 7]
Agora o otimi3ador est utili3ando a c*ave primria da ta%ela )We5 Primar5. A
SE'EC 1 est mais rpida e a leitura das lin*as (eita apenas na (ai&a selecionada
)t5pe ange
EP'AIM SE'EC Z =G &alog7 JKEE storeno 7]
GM R SACI R 8
-
7/25/2019 QuerySql
60/71
M1 Ot)m)ao /e SELECTS
Esta SE'EC est mais otimi3ada ainda, pois a leitura est sendo (eita atravs do
uso da c*ave i8 )We5 i8 e somente !uando a c*ave (or igual a 7 )condio JKEE.
%serve o campo t5pe re(
EP'AIM SE'EC storeno, date, prd.name =G &alog7 le(t 1oin prd on&alog7.prdno prd.no 4*ere storeno 7]
Mesta SE'EC estamos in(ormando ao G5S' !ue a ta%ela mestre a &alog7 e
no de(inimos nen*uma condio para a leitura da ta%ela prd. A otimi3ao para a &alog7
est %oa )t5pe re( e para a prd est muito %oa )t5pe e!+re(, indicando !ue sero
lidos somente registros com relao na ta%ela &alog7. Ftili3a a c*ave i8 para a &alog7 e
a c*ave primria para a prd.
Se esta mesma SE'EC (osse e&ecutada sem utili3ao do 'E= LIM o resultado
seria o mesmo, porm seria um pouco mais demorada, pois o otimi3ador do G5S' !ue
teria o tra%al*o de (a3er a 1oin usando o 'E=
EP'AIM SE'EC storeno, date, prd.name =G &alog7, prd JKEE
&alog7.prdno prd.no AM0 storeno AM0 prd.t5peno ]
GM R SACI R 8
-
7/25/2019 QuerySql
61/71
M1 Ot)m)ao /e SELECTS
Mesta SE'EC colocamos uma condio para a ta%ela prd. Mote !ue o otimi3ador
utili3ou ento a prd como mestre e a leitura (icou do tipo re( para am%as as ta%elas.
E&perimente agora e&ecutar esta mesma SE'EC para a lo1a 7.
EP'AIM SE'EC storeno, date, prd.name =G &alog7, prd JKEE
&alog7.prdno prd.no AM0 storeno 7 AM0 prd.t5peno ]
%serve !ue o otimi3ador mudou totalmente a ordem de e&ecuo da SE'EC. A
ta%ela &alog7 (oi usada como mestre e a relao com a prd (icou muito otimi3ada )t5pe
e!+re(. Isto por!ue o nmero de registros selecionados da ta%ela &alog7 menor !ue o
nmero de registros da ta%ela prd
EP'AIM SE'EC storeno, date, prd.name =G &alog7, prd JKEE
&alog7.prdno prd.no AM0 storeno IM),7 AM0 prd.t5peno ]
GM R SACI R 8
-
7/25/2019 QuerySql
62/71
M1 Ot)m)ao /e SELECTS
Esta SE'EC um e&emplo da utili3ao do IM. =aa a mesma SE'EC porm
para a condio da lo1a colo!ue a seguinte sinta&e: ... AM0 storeno storeno 7
AM0 ...
SE'EC storeno, prd.name, CFM)Z AS counter =G &alog7, prd JKEE
&alog7.prdno prd.no AM0 storeno IM),7 DFP \ prdno KANIMD counter # @]
Esta SE'EC e&empli(ica o uso da clusula KANIMD. Ela utili3ada !uando se
!uer uma seleo em cima do resultado da SE'EC. Mo e&emplo estamos %uscando
produtos !ue tiveram mais de cinco vendas por lo1a, independente do per$odo.Apesar de no ser uma opo otimi3ada, em alguns casos seu uso inevitvel
M10 Re(umo
'E= LIM sempre mais rpido
A (uno IM GFI otimi3ada
Mo use KANIMD se vocO pode usar JKEE
Simpli(i!ue as e&presses, sempre !ue poss$vel
M14 E;ercc)o M
Gonte o relatrio re(erente a anlise dos e&erc$cios e