QuerySql

download QuerySql

of 71

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