Qlik Community

Ask a Question

Brasil

Announcements
Qlik Highlights 2020 Giveaway! Watch, reply and have a chance to win a $200 Amazon Gift Card! Watch Video
cancel
Showing results for 
Search instead for 
Did you mean: 
Contributor II
Contributor II

Problemas com consulta sql em variável montada dinamicamente

Boa tarde Pessoal,

Estou com uma dúvida de como tratar valores literais dentro de uma consulta SQL carregada dinamicamente em uma variavel. O Script abaixo funciona, porém, gostaria de saber se existe uma forma mais direta de fazer a mesma coisa sem ser obrigado a criar variáveis de memória para cada condição que eu tiver no where

A ideia é fazer um select em todas as 21 empresas. O código abaixo funciona, mas supondo que a X5_TABELA fosse somente a ZX, eu não poderia fazer:

cSql = cSql & ' LEFT JOIN SX5$(n)0 CIV ON RA_ESTCIVI = CIV.X5_CHAVE AND CIV.X5_TABELA='ZX' ';  ao inves de CIV.X5_TABELA=$(tabZX)'; como está no código abaixo ?

Existe algum caracter de escape que trate isso ?

Se eu utilizar a consulta com literais na cláusula SQL SELECT... funciona sem problemas.

--- CODIGO FUNCIONAL ----

set tab33 = "'33'";

set tabZX = "'ZX'";

set vazio = "''";

for x = 1 to 21

    if x <> 3 and x <> 4  then

        let n = Num(x,'00');       

       

          cSql = cSql & ' SELECT RA_FILIAL ,RA_MAT, RA_NOMECMP, RA_SEXO, RJ_DESC, CIV.X5_DESCRI AS EST_CIVIL, RA_ADMISSA, RA_DEMISSA, RA_NASC, RA_SITFOLH,' ;

        cSql = cSql & ' RA_SEGUROV, RA_CATFUNC, RA_SALARIO, RA_XSALCOT, RA_XDISTRI, RA_DEPTO, RA_ITEM, RA_CLVL, RA_CODMUN, CC2_MUN, ' ;

        cSql = cSql & ' ALOC.X5_DESCRI AS ALOCACAO, RA_TNOTRAB, RA_HRSDIA,  RA_HRSEMAN, RA_HRSMES, RA_XCODPO, RA_XCODPS, ' ;

        cSql = cSql & ' VER.CV0_DESC AS VERTICAL,  REG.CV0_DESC AS REGIONAL ' ;

         cSql = cSql & ' FROM SRA$(n)0 RA ' ;

        cSql = cSql & ' INNER JOIN SRJ010 RJ ON RA_CODFUNC = RJ_FUNCAO ' ;

        cSql = cSql & ' LEFT JOIN SX5$(n)0 CIV ON RA_ESTCIVI = CIV.X5_CHAVE AND CIV.X5_TABELA=$(tabZX) ';

        cSql = cSql & ' LEFT JOIN SX5$(n)0 ALOC ON RA_XALOCA = ALOC.X5_CHAVE AND ALOC.X5_TABELA=$(tab33) ';

        cSql = cSql & ' LEFT JOIN CV0010 VER ON VER.CV0_CODIGO = RA_EC05DB AND VER.CV0_ITEM<>$(vazio) ';

        cSql = cSql & ' LEFT JOIN CV0010 REG ON REG.CV0_CODIGO = RA_EC06DB AND REG.CV0_ITEM<>$(vazio) ';

        cSql = cSql & ' LEFT JOIN CC2010 CC2 ON RA_CODMUN = CC2_CODMUN AND CC2_MUN<>$(vazio) ';

        if x < 21 then

             cSql = cSql & ' UNION ALL ';

        endif

 

        Trace $(x);

     endif

Next

Trace $(cSql);

[funcionario]:

Load RA_MAT as Matricula,

RA_NOMECMP as Nome;

sql $(cSql);

Obrigado pela atenção.

Labels (4)
0 Replies