Páginas filhas
  • log0810_prepare_sql()

Versões comparadas

Chave

  • Esta linha foi adicionada.
  • Esta linha foi removida.
  • A formatação mudou.

...

Em versões mais antigas destes bancos de dados era feito desta forma o uso da , era utilizada a condição OUTER JOIN .da seguinte forma:

INFORMIX

Diretiva OUTER

SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ
  FROM empresa, OUTER log_empresa_compl
 WHERE log_empresa_compl.empresa = empresa.cod_empresa

ORACLE

Diretiva (+)

SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ
  FROM empresa, log_empresa_compl
 WHERE log_empresa_compl.empresa (+) = empresa.cod_empresa

SQLSERVER

Diretiva *

SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ
  FROM empresa, log_empresa_compl
 WHERE log_empresa_compl.empresa = * empresa.cod_empresa


Para resolver esta diferença, era feito o uso da função log0810_prepare_sql() montando uma instrução SQL em um bloco de texto (CHAR) e enviado como parâmetro para função log0810_prepare_sql(), que tinha como objetivo converter a instrução SQL conforme o banco de dados em uso no Logix e o resultado seria retornado com a instrução compatível com o banco de dados. 

...

INFORMIX

ORACLE

SQLSERVER

SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ
  FROM empresa LEFT OUTER JOIN log_empresa_compl
    ON (log_empresa_compl.empresa = empresa.cod_empresa)

 

Desta forma os códigos dos fontes Logix que fazem uso da função log0810_prepare_sql() precisam ser ajustados para adaptar os SQLs preparados e com chamada da função log0810_prepare_sql() para utilizarem o novo padrão ANSI SQL - OUTER JOIN e retirada da chamada da função log0810_prepare_sql() conforme exemplo abaixo:

...

Bloco de código
titleCÓDIGO NOVO (Solução 1)
DEFINE sql_stmt CHAR(1000)
 
LET sql_stmt = "SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ",
                " FROM empresa LEFT OUTER JOIN log_empresa_compl",
                  " ON (log_empresa_compl.empresa = empresa.cod_empresa)"
 
WHENEVER ERROR CONTINUE
PREPARE var_query FROM sql_stmt
DECLARE cq_empresas CURSOR FOR var_query
WHENEVER ERROR STOP

...

Neste caso poderia ser retirado o uso de SQL preparado da seguinte forma:

 

Bloco de código
titleCÓDIGO NOVO (Solução 2)
WHENEVER ERROR CONTINUE
DECLARE cq_empresas CURSOR FOR 
 SELECT empresa.cod_empresa, log_empresa_compl.dat_encerram_ativ
   FROM empresa LEFT OUTER JOIN log_empresa_compl
     ON (log_empresa_compl.empresa = empresa.cod_empresa)
WHENEVER ERROR STOP