Escolar Documentos
Profissional Documentos
Cultura Documentos
Embedded SQL
Embedded SQL
Versão 8.11
O objetivo do Embedded SQL é facilitar a escrita e leitura de query's. Foi definida uma
sintaxe para que se possa escrever a query diretamente no código ADVPL, sem a
necessidade de ficar concatenando pedaços de string para compor a string final.
Disponibilidade do Recurso
A partir da atualização da LIB 811, superior a 'Lib 20050902 - 811', não será necessária
a aplicação deste patch.
Exemplo básico - Fonte atual
dbUseArea(.T.,'TOPCONN',TcGenQry(,,cQuery),'E2TEMP',.T.,.T.)
TCSetField('E2TEMP','E2_EMISSAO','D',8,0)
• O bloco onde será escrito o Select deve sempre ser iniciado com 'BeginSql alias' e
finalizado com 'EndSql'.
• Partes do código que devem ser substituídas aparecem entre os sinais de %. Estas
expressões possuem tratamento especial em momento de execução.
• Qualquer instrução colocada entre BEGINSQL ... ENDSQL, que não seja uma
expressão %...% , será inserida na query a ser enviada para o banco, de forma
literal.
• Variáveis, expressões, funções aparecem iniciando com %exp: %.
• Em column, especificar campos da query que são do tipo data, lógico ou numérico
(DATE, LOGIC, NUMBER). Esta linha é trocada por chamadas à função
TCSetField.
• %noparser% indica que a query não deve passar pela função 'ChangeQuery' antes
de ser enviada ao banco de dados. Caso não especificado, o default é a string da
query ser passada automaticamente pela função ChangeQuery.
• %table:<alias>% é substituída por RetSqlName(<alias>)
• %notDel% é substituída por D_E_L_E_T_= ' '
• %Order:<alias>% é substituída por SqlOrder(<alias>->(IndexKey()))
SqlOrder(<cAlias>->(IndexKey()))
SqlOrder(<cAlias>->(IndexKey(<nIndice>)))
SqlOrder(<alias>->(DBNickIndexKey(<cNick>)))
Limitação:
Ex:
tam_cp := GetE2ValorSize()
BeginSql alias 'E2TEMP'
column E2_EMISSAO as Date, E2_VALOR as
Numeric(tam_cp,2)
...
EndSql
Erros de Compilação
Caso seja utilizado algum argumento inválido para especificar as colunas, ou erros de
sintaxe nas expressões a serem transformadas para a montagem da query, a compilação do
fonte é interrompida com a ocorrência 'Syntax Error', informando a linha onde a primeira
ocorrência foi encontrada.
Caso a instrução BeginSQL especifique um alias que já esteja aberto (em uso), a
aplicação é abortada com a ocorrência de erro fatal acima, informando em XXX o
alias utilizado.
• 'Query Argument Error : Invalid Value Type [X]'
Caso alguma expressão informada na Query, através da tag %exp: ... %, retorne um
valor de tipo diferente de 'C' Catacter, 'D' Data, 'N' Numérico, ou 'L' Lógico, a
aplicação é abortada com a ocorrência de erro acima, onde o tipo do argumento
inesperado é mostrado em [X].
• 'Type Mismach on +'
Caso um fonte com o Embedded SQL seja executado em um repositório que não
tenha sido atualizado, OU que não seja um Repositório para o ambiente
TOPConnect ( RPODB=TOP), a aplicação exibirá a ocorrência acima, indicando
que a função interna de execução da Query não está presente no ambiente. Verifique
se a lib está atualizada, e se o RPO em uso é de um ambiente TOPConnect.
ADVPL
%noparser%