Aplicaciones PL/I que emiten sentencias SQL

Puede codificar sentencias SQL en un programa PL/I siempre que pueda utilizar sentencias ejecutables.

La primera sentencia del programa PL/I debe ser la sentencia PROCEDURE con OPTIONS(MAIN), a menos que el programa sea un procedimiento almacenado. Una aplicación de procedimiento almacenado puede ejecutarse como una subrutina.

Cada sentencia SQL en un programa PL/I debe comenzar con EXEC SQL y terminar con un punto y coma (;). Las palabras clave EXEC y SQL deben aparecer en una sola línea, pero el resto de la sentencia puede aparecer en líneas posteriores.

Puede codificar una sentencia UPDATE en un programa PL/I de la siguiente manera:

EXEC SQL UPDATE DSN8C10.DEPT
           SET MGRNO = :MGR_NUM
           WHERE DEPTNO = :INT_DEPT ;
Comentarios
Puede incluir comentarios PL/I en sentencias SQL incrustadas siempre que pueda utilizar un espacio en blanco, excepto entre las palabras clave EXEC y SQL. También puede incluir comentarios SQL en cualquier instrucción SQL. Para más información, consulte los comentarios de SQL.

Para incluir caracteres DBCS en comentarios, debe delimitar los caracteres con un carácter de control shift-out y shift-in; el primer carácter shift-in de la cadena DBCS señala el final de la cadena DBCS.

Continuación para sentencias SQL
Las reglas de continuación de línea para sentencias SQL son las mismas que para otras sentencias PL/I, excepto que debe especificar EXEC SQL en una línea.
Delimitadores para instrucciones SQL
Delimite una sentencia SQL en su programa PL/I con la palabra clave de inicio EXEC SQL y un punto y coma (;).
Declaración de tablas y vistas
Su programa PL/I debe incluir una sentencia DECLARE TABLE para describir cada tabla y vista a la que accede el programa. Puede utilizar el generador de declaraciones de Db2 (DCLGEN) para generar las declaraciones DECLARE TABLE.
Incluir código
Puede utilizar sentencias SQL o declaraciones de variables host PL/I de un miembro de un conjunto de datos particionado utilizando la siguiente sentencia SQL en el código fuente donde desee incluir las sentencias:
EXEC SQL INCLUDE member-name;

No se pueden anidar sentencias SQL INCLUDE. No utilice la sentencia PL/I %INCLUDE para incluir sentencias SQL o sentencias DCL de variables de host. Debe utilizar el preprocesador PL/I para resolver cualquier sentencia %INCLUDE antes de utilizar el precompilador Db2 . No utilice directivas de preprocesamiento PL/I dentro de sentencias SQL.

Márgenes
Codifique las sentencias SQL en las columnas 2-72, a menos que haya especificado otros márgenes al precompilador Db2 . Si EXEC SQL comienza antes del margen izquierdo especificado, el precompilador de instrucciones SQL ( Db2 ) no reconoce la instrucción SQL.
Nombres
Puede utilizar cualquier nombre válido de PL/I para una variable de host. No utilice nombres de entrada externos o nombres de planes de acceso que empiecen por «DSN», ni nombres de variables de host que empiecen por «SQL». Estos nombres están reservados para Db2.
Números de secuencia
Las sentencias fuente que genera el precompilador Db2 no incluyen números de secuencia. IEL0378I los mensajes del compilador PL/I identifican líneas de código sin números de secuencia. Puede ignorar estos mensajes.
Etiquetas de declaración
Puede especificar una etiqueta de sentencia para las sentencias SQL ejecutables. Sin embargo, las sentencias INCLUDE nombre-archivo-texto y END DECLARE SECTION no pueden tener etiquetas de sentencia.
WHENEVER, sentencia
El objetivo de la cláusula GOTO en una sentencia SQL WHENEVER debe ser una etiqueta en el código fuente de PL/I y debe estar dentro del ámbito de cualquier sentencia SQL a la que WHENEVER afecte.
Uso de caracteres del juego de caracteres de doble byte (DBCS)
Las siguientes consideraciones se aplican al uso de DBCS en programas PL/I con sentencias SQL:
  • Si utiliza DBCS en la fuente PL/I, se aplicarán las normas Db2 para los siguientes elementos lingüísticos:
    • Series gráficas
    • Constantes de series gráficas
    • Identificadores del lenguaje principal
    • Datos mezclados en series de caracteres
    • Opción DATOS MIXTOS
  • El preprocesador PL/I transforma el formato de las constantes DBCS. Si no desea esa transformación, ejecute el precompilador Db2 antes que el preprocesador.
  • Si utiliza constantes de cadena gráfica o datos mixtos en sentencias SQL preparadas dinámicamente, y si su aplicación requiere el compilador PL/I Versión 2 (o posterior), las sentencias preparadas dinámicamente deben utilizar el formato de constante mixta PL/I.
    • Si prepara la sentencia desde una variable host, cambie la asignación de cadena por una cadena mixta PL/I.
    • Si prepara la sentencia a partir de una cadena PL/I, cámbiela a una variable host y, a continuación, cambie la asignación de la cadena a una cadena mixta PL/I.

    Ejemplo:

    SQLSTMT = 'SELECT <dbdb> FROM table-name'M;
    EXEC SQL PREPARE STMT FROM :SQLSTMT;
  • Si desea que un identificador DBCS se parezca a una cadena gráfica PL/I, debe utilizar un identificador delimitado.
  • Si incluye caracteres DBCS en los comentarios, debe delimitar los caracteres con un carácter de control shift-out y shift-in. El primer carácter de cambio de turno señala el final de la cadena DBCS.
  • Puede declarar nombres de variables host que utilicen caracteres DBCS en los programas de aplicación PL/I. Las reglas para utilizar nombres de variables DBCS en PL/I siguen las reglas existentes para los identificadores ordinarios DBCS SQL, excepto en lo que respecta a la longitud. La longitud máxima de una variable de host es de 128 bytes Unicode en Db2. Para obtener información sobre las reglas para los identificadores ordinarios DBCS SQL, consulte la información sobre los identificadores SQL.
    Restricciones:
    • Los nombres de variables DBCS deben contener únicamente caracteres DBCS. Mezclar caracteres de un solo byte (SBCS) con caracteres DBCS en un nombre de variable DBCS produce resultados impredecibles.
    • Un nombre de variable DBCS no puede continuar en la línea siguiente.
  • El preprocesador PL/I convierte los caracteres DBCS que no son kanji en caracteres SBCS de código de intercambio decimal codificado binario extendido (EBCDIC). Para evitar este cambio, utilice caracteres Kanji DBCS para los nombres de variables DBCS, o ejecute el compilador PL/I sin el preprocesador PL/I.
Consideraciones especiales PL/I
Las siguientes consideraciones se aplican a los programas escritos en PL/I :
  • Al compilar un programa PL/I que incluya sentencias SQL, debe utilizar la opción del compilador PL/I CHARSET (60 EBCDIC).
  • Al compilar un programa PL/I que utilice tipos de datos BIGINT o LOB, especifique las siguientes opciones del compilador: LIMITS(FIXEDBIN(63), FIXEDDEC(31))
  • En casos poco habituales, los comentarios generados en PL/I pueden contener un punto y coma. El punto y coma genera el mensaje del compilador IEL0239I, que puede ignorar.
  • El código generado en una declaración PL/I puede contener la función ADDR de un campo definido como carácter variable. Esto produce el mensaje IBM105l l o IBM1180l W, los cuales puede ignorar.
  • El código generado por el precompilador en PL/I source puede contener la función NULL(). Esto produce el mensaje IEL0533I, que puede ignorar a menos que también utilice NULL como variable PL/I. Si utiliza NULL como una variable PL/I en una aplicación Db2 , también debe declarar NULL como una función incorporada (DCL NULL BUILTIN;) para evitar errores del compilador PL/I.
  • El procesador de macros PL/I puede generar sentencias SQL o sentencias DCL de variables de host si ejecuta el procesador de macros antes de ejecutar el precompilador Db2 .

    Si utiliza el macroprocesador PL/I, no utilice la sentencia PL/I *PROCESS en el código fuente para pasar opciones al compilador PL/I. Puede especificar las opciones necesarias en el parámetro COPTION del comando DSNH o en la opción PARM.PLI=options de la sentencia EXEC en el procedimiento DSNHPLI.

  • El uso de la función multitarea PL/I, en la que varias tareas ejecutan sentencias SQL, provoca resultados impredecibles.
  • PL/I El tipo de datos de host WIDECHAR sólo es compatible con el coprocesador Db2 .
  • Si utiliza la constante widechar PL/I WX, Db2 sólo admite el formato bigendian. Así, cuando asigne una constante a la variable host de tipo widechar en PL/I, asegúrese de que se utiliza el formato bigendian. Por ejemplo:
     HVWC1 = '003100320033006100620063'WX;   
    Equivalente a:
     HVWC1 = '123abc'; 
    HVWC1 se define como una variable de host de tipo WIDECHAR.
  • PL/I Opción del preprocesador SQL, CCSID0 y NOCCSID0, consideración de uso cuando se utiliza con el coprocesador Db2 .
    • Cuando se utiliza CCSID0 (por defecto), se fomenta la compatibilidad con programas anteriores de PL/I, que utilizaban el precompilador Db2 . Durante la preparación del programa, no se asocia ningún valor CCSID con la variable host, excepto para la variable host de tipo WIDECHAR. Para la variable host de tipo WIDECHAR, el CCSID 1200 siempre es asignado por el preprocesador SQL PL/I.

      Durante BIND y el tiempo de ejecución, si no hay ningún CCSID asociado a la variable host, se utiliza la opción BIND, ENCODING, que está pensada para los datos de la aplicación. Si no se especifica la opción ENCODING BIND, se utiliza el valor predeterminado de la opción ENCODING BIND.

    • Cuando utiliza NOCCSID0, se asocia un CCSID con la variable de host durante la preparación del programa. El CCSID se deriva de los siguientes elementos durante la preparación del programa:
      • DECLARE :hv VARIABLE CCSID xxxx especificado.
      • Fuente CCSID, si no DECLARE VARIABLE... Se especifica CCSID xxxx para la variable de host. Durante el tiempo de BIND, tenga en cuenta que el proceso de BIND desconoce el CCSID asignado a la variable host durante la preparación del programa. Para obtener más información sobre la resolución CCSID en tiempo BIND, consulte Esquema de codificación y reglas CCSID para cadenas.

        Para la variable host utilizada en SQL estático, asegurarse de que se asigne/derive un CCSID preciso y coincidente a través de DECLARE VARIABLE... CCSID xxxx, CCSID de origen u opción ENCODING BIND o el valor predeterminado de instalación

        Para el marcador de parámetros utilizado en SQL dinámico, asegurarse de que se asigne/derive un CCSID preciso para la variable de host correspondiente a través de DECLARE VARIABLE... CCSID xxxx, opción ENCODING BIND o la configuración predeterminada de la instalación. El CCSID de origen no influye en el marcador de parámetros.

Manejo de códigos de error de SQL
Las aplicaciones PLI/I pueden solicitar más información sobre errores SQL en Db2. Para más información, consulte Manejo de códigos de error SQL en aplicaciones PL/I.