Nesse vídeo demonstraremos em como padronizar a sintaxe de uma query SQL usando a função ChangeQuery.
Abaixo o código fonte desenvolvido para o exemplo em vídeo acima:
//Bibliotecas
#Include "TOTVS.ch"
/*/{Protheus.doc} User Function zExe078
Exemplo de como formatar uma query deixando padronizado independente do banco de dados
@type Function
@author Atilio
@since 08/12/2022
@see https://tdn.totvs.com/display/public/framework/ChangeQuery
@obs
Função ChangeQuery
Parâmetros
+ cQuery , Caractere , Informa a query a ser analisada
Retorno
+ cNewQuery , Caractere , Retorna a nova query em um padrão que rode em SQL Server ou Oracle ou Postgre
Ao utilizar o ChangeQuery, tome cuidado que alguns comandos não serão interpretados como o:
WITH (NOLOCK)
Nesse artigo é exemplificado utilizando o Query Analyzer do APSDU:
**** Apoie nosso projeto, se inscreva em https://www.youtube.com/TerminalDeInformacao ****
/*/
User Function zExe078()
Local aArea := FWGetArea()
Local cQryOrig := ""
Local cQryNova := ""
Local cMensagem := ""
//Monta a query original
cQryOrig := " SELECT " + CRLF
cQryOrig += " B1_COD, " + CRLF
cQryOrig += " B1_DESC, " + CRLF
cQryOrig += " B1_GRUPO, " + CRLF
cQryOrig += " ISNULL(BM_GRUPO, '') AS DESCGRUP " + CRLF
cQryOrig += " FROM " + CRLF
cQryOrig += " " + RetSQLName("SB1") + " SB1 " + CRLF
cQryOrig += " LEFT JOIN " + RetSQLName("SBM") + " SBM ON ( " + CRLF
cQryOrig += " BM_FILIAL = '01' " + CRLF
cQryOrig += " AND BM_GRUPO = B1_GRUPO " + CRLF
cQryOrig += " AND SBM.D_E_L_E_T_ = ' ' " + CRLF
cQryOrig += " ) " + CRLF
cQryOrig += " WHERE " + CRLF
cQryOrig += " B1_FILIAL = ' ' " + CRLF
cQryOrig += " AND SB1.D_E_L_E_T_ = ' ' " + CRLF
//Transforma a query
cQryNova := ChangeQuery(cQryOrig)
//Agora exibe as duas
cMensagem := "/* cQryOrig: */" + CRLF
cMensagem += cQryOrig + CRLF
cMensagem += "/* cQryNova: */" + CRLF
cMensagem += cQryNova
ShowLog(cMensagem)
FWRestArea(aArea)
Return
Bom pessoal, por hoje é só.
Abraços e até a próxima.