Usina BRGuía AdvPL
Ingresar
← Todos los temas
FUNDAMENTOPublicado

Embedded SQL en AdvPL

BeginSql Alias cAlias ... EndSql

Escribe SQL legible directamente en el código AdvPL mediante sustituciones del precompilador y conversión declarativa de tipos.

SQLEmbedded SQLDBAccessTopConnQueryBase de datos
01 · DESCRIPCIÓN GENERAL

Descripción general

Embedded SQL reemplaza la concatenación manual con un bloque BeginSql/EndSql. El SQL literal se conserva y las expresiones entre porcentajes resuelven tablas, filiales, valores, exclusión lógica y órdenes de Protheus. El cursor se abre en el alias informado y ChangeQuery() se aplica de forma predeterminada.

02 · SINTAXIS

Sintaxis

BeginSql Alias cAlias ... EndSql

Parámetros

BeginSql Alias
ComandoObligatorio

Inicia el bloque y define el alias del cursor.

column ... as Date | Logical | Numeric
DeclaraçãoOpcional

Declara la conversión de fechas, lógicos o numéricos.

%table:ALIAS%
SubstituiçãoOpcional

Resuelve la tabla física mediante RetSqlName().

%xfilial:ALIAS%
SubstituiçãoOpcional

Inserta la filial correspondiente a la tabla.

%notDel%
SubstituiçãoOpcional

Genera el filtro de exclusión lógica.

%exp:expressão%
SubstituiçãoOpcional

Evalúa un valor AdvPL carácter, fecha, numérico o lógico.

%Order:ALIAS,nOrdem%
SubstituiçãoOpcional

Convierte una orden de índice con SqlOrder().

%temp-table:cNome%
SubstituiçãoOpcional

Inserta el nombre de una tabla temporal guardado en variable.

%noparser%
ModificadorOpcional

Omite ChangeQuery(); úsalo solo para un caso específico intencional.

EndSql
ComandoObligatorio

Finaliza el bloque y abre el cursor.

03 · EJEMPLO PRÁCTICO

Consulta de clientes con conversiones de Protheus

// Consulta el ejemplo en portugués; localiza solo los textos para el usuario.
Resultado esperado

El precompilador resuelve tabla, filial, valor, exclusión y orden.

04 · EJEMPLO PRÁCTICO

Conversión declarativa y diagnóstico

Local cAlias := GetNextAlias()
Local aInfo  := {}

BeginSql Alias cAlias
    column E2_EMISSAO as Date
    column E2_VALOR as Numeric(16, 2)
    SELECT E2_EMISSAO, E2_VALOR
      FROM %table:SE2% SE2
     WHERE E2_FILIAL = %xfilial:SE2%
       AND SE2.%notDel%
EndSql

aInfo := GetLastQuery()
ConOut("Tempo de abertura: " + cValToChar(aInfo[5]))
(cAlias)->(DbCloseArea())
Resultado esperado

Los campos llegan con el tipo declarado y GetLastQuery() expone los detalles de ejecución.

BUENAS PRÁCTICAS
  • Mantén una cláusula WHERE para que los filtros de acceso se agreguen correctamente.
  • Declara con column los tipos no carácter.
  • Utiliza GetLastQuery() para inspeccionar SQL y tiempo de apertura.
  • Coloca breakpoints antes o después del bloque.
  • Utiliza RPO DBAccess y LIB compatibles.
ERRORES COMUNES
  • Evalúa las funciones antes del bloque y pasa el resultado con %exp%.
  • No inicies una línea con *; el precompilador puede tratarla como comentario.
  • El carácter ? está reservado; considera FWPreparedStatement o FWExecStatement.
  • Utiliza un alias dinámico libre y ciérralo con DbCloseArea().
  • %exp:% no admite arrays u objetos.
  • Evita %noparser% salvo que la pérdida de portabilidad sea intencional.

Contenido relacionado

REFERENCIAS
  1. TOTVS. Embedded SQL. TDN.
  2. TOTVS. Desarrollo de queries en Protheus. TDN.
  3. TOTVS. FWPreparedStatement. TDN.
  4. TOTVS. FWExecStatement. TDN.
  5. MICROSIGA. Manual de Programación. Documento colaborativo, archivo fechado el 11 jul. 2001. Referencia histórica.
Estado
Publicado
Página creada el
Última revisión el
Idioma original
Portugués
Revisión
Usina.BR