15200 - Exemplo de LEFT OUTER JOIN em cursor com várias tabelas
Problema: Precisamos utilizar o comando LEFT OUTER JOIN no gerador de relatórios com cursor e não está funcionando.
Gostaríamos de ter um exemplo.
Rotina / Tela: Gerador de relatórios e regras em geral
Solução: Solução 15200:
@Exemplo 1 @
definir numero xcodfil;
definir alfa xnomcli;
definir alfa xstr;
definir alfa xsql;
xStr = select b.codfil,c.nomcli from (e085hcl b left outer join e085cli c on b.codcli = c.codcli);
SQL_Criar(xSQL);
SQL_DefinirComando(xSQL, xStr);
SQL_AbrirCursor(xSQL);
enquanto (SQL_Eof(xSQL) = 0)
{
SQL_RetornarInteiro(xSQL, codfil, xcodfil);
SQL_RetornarAlfa(xSQL, nomcli, xnomcli);
SQL_Proximo(xSQL);
}
SQL_FecharCursor(xSQL);
SQL_Destruir(xSQL);
@Exemplo 2 @
definir alfa Cur_E120IPD;
Definir alfa xCodpro;
SQL_Criar(Cur_E120IPD);
@ Usar o SQL_DefinirInteiro... para as variáveis do SQL_DefinirComando, caso contrario não gera dados, pois no nosso exemplo está fixo as informações @
SQL_DefinirComando(Cur_E120IPD, Select
E120IPD.SEQIPD,E120IPD.NUMPED,E120IPD.CODEMP,E120IPD.CODPRO,
E075DER.CODPRO, E075PRO.CODPRO,E075PRO.VOLPRO,(E120IPD.QTDPED * E075PRO.VOLPRO) AS VOLM3
From
E075PRO,(E120IPD LEFT OUTER JOIN E075DER ON E120IPD.CODEMP = E075DER.CODEMP AND
E120IPD.CODPRO = E075DER.CODPRO)
Where
E120IPD.CodEmp = 1 AND
E120IPD.NUMPED = '171' AND
E120IPD.CODEMP = E075PRO.CODEMP AND
E120IPD.CODPRO = E075PRO.CODPRO AND
E120IPD.SitIpd = 8);
SQL_AbrirCursor(Cur_E120IPD);
Se (SQL_EOF(Cur_E120IPD) = 0)
Inicio
SQL_RetornarAlfa(Cur_E120IPD,CodPro, xcodpro);
SQL_RetornarInteiro(Cur_E120IPD,NumPed, xNumped);
Fim;
SQL_FecharCursor(Cur_E120IPD);
Gostaríamos de ter um exemplo.
Rotina / Tela: Gerador de relatórios e regras em geral
Solução: Solução 15200:
@Exemplo 1 @
definir numero xcodfil;
definir alfa xnomcli;
definir alfa xstr;
definir alfa xsql;
xStr = select b.codfil,c.nomcli from (e085hcl b left outer join e085cli c on b.codcli = c.codcli);
SQL_Criar(xSQL);
SQL_DefinirComando(xSQL, xStr);
SQL_AbrirCursor(xSQL);
enquanto (SQL_Eof(xSQL) = 0)
{
SQL_RetornarInteiro(xSQL, codfil, xcodfil);
SQL_RetornarAlfa(xSQL, nomcli, xnomcli);
SQL_Proximo(xSQL);
}
SQL_FecharCursor(xSQL);
SQL_Destruir(xSQL);
@Exemplo 2 @
definir alfa Cur_E120IPD;
Definir alfa xCodpro;
SQL_Criar(Cur_E120IPD);
@ Usar o SQL_DefinirInteiro... para as variáveis do SQL_DefinirComando, caso contrario não gera dados, pois no nosso exemplo está fixo as informações @
SQL_DefinirComando(Cur_E120IPD, Select
E120IPD.SEQIPD,E120IPD.NUMPED,E120IPD.CODEMP,E120IPD.CODPRO,
E075DER.CODPRO, E075PRO.CODPRO,E075PRO.VOLPRO,(E120IPD.QTDPED * E075PRO.VOLPRO) AS VOLM3
From
E075PRO,(E120IPD LEFT OUTER JOIN E075DER ON E120IPD.CODEMP = E075DER.CODEMP AND
E120IPD.CODPRO = E075DER.CODPRO)
Where
E120IPD.CodEmp = 1 AND
E120IPD.NUMPED = '171' AND
E120IPD.CODEMP = E075PRO.CODEMP AND
E120IPD.CODPRO = E075PRO.CODPRO AND
E120IPD.SitIpd = 8);
SQL_AbrirCursor(Cur_E120IPD);
Se (SQL_EOF(Cur_E120IPD) = 0)
Inicio
SQL_RetornarAlfa(Cur_E120IPD,CodPro, xcodpro);
SQL_RetornarInteiro(Cur_E120IPD,NumPed, xNumped);
Fim;
SQL_FecharCursor(Cur_E120IPD);