Notas del release

34.4 Capítulo 5. Creación de procedimientos de SQL

34.4.1 Establecimiento del entorno de procedimientos de SQL

Estas instrucciones se añaden a las instrucciones para configurar el entorno de DB2 en "Configuración".

Para el soporte de procedimientos de SQL, debe instalar en el servidor el Application Development Client. Para obtener información sobre cómo instalar el Application Development Client, consulte el manual Guía rápida de iniciación de su plataforma. Para ver qué compiladores C y C++ soporta DB2 en su plataforma, consulte "Supported Software by Platform".

Nota:
En un sistema de archivos FAT de OS/2, el nombre de esquema para los procedimientos de SQL está limitado a ocho caracteres o menos. Deberá utilizar el sistema de archivos HPFS para nombres de esquema con una longitud superior a ocho caracteres.

La configuración del compilador tiene dos partes: establecer las variables de entorno para el compilador y definir el mandato de compilación. Las variables de entorno proporcionan las vías de acceso a los binarios del compilador, las bibliotecas y los archivos de inclusión. El mandato de compilación es el mandato completo que DB2 utilizará para compilar los archivos C generados para los procedimientos de SQL.

34.4.2 Establecimiento de las variables de entorno del compilador

Existen distintas normas para la configuración del entorno en sistemas operativos basados en OS/2, Windows y UNIX, tal como se explica a continuación. En algunos casos, no es necesaria ninguna configuración; en otros casos, es necesario establecer la variable de registro DB2_SQLROUTINE_COMPILER_PATH DB2 para que apunte a un script ejecutable que establece las variables de entorno correctamente.

Nota:
puede utilizar el mandato db2set o el diálogo Opciones de creación de procedimientos almacenados de SQL del Stored Procedure Builder para establecer el valor de esta variable de registro de DB2. La utilización del diálogo Opciones de creación de procedimientos almacenados de SQL elimina la necesidad de acceder físicamente al servidor de bases de datos o de reiniciar el servidor de bases de datos para que los cambios surtan efecto.

En OS/2:

   para IBM VisualAge C++ para OS/2 Versión 3.6:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxo\bin\setenv.cmd"
 
   para IBM VisualAge C++ para OS/2 Versión 4:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcpp40\bin\setenv.cmd"

Nota:
Para estos mandatos, se asume que el compilador C++ está instalado en la unidad c:. Si es necesario, cambie la unidad o la vía de acceso, para que refleje la ubicación del compilador C++ en el sistema.

En sistemas operativos Windows de 32 bits, si las variables de entorno para el compilador están establecidas como variables SYSTEM, no se precisa ninguna configuración. En caso contrario, establezca la variable de registro DB2_SQLROUTINE_COMPILER_PATH DB2 de la forma siguiente:

   para Microsoft Visual C++ Versiones 5.0:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\devstudio\vc\bin\vcvars32.bat"
 
   para Microsoft Visual C++ Versiones 6.0:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\Micros~1\vc98\bin\vcvars32.bat"
 
   para IBM VisualAge C++ para Windows Versión 3.6:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcxxw\bin\setenv.bat"
 
   para IBM VisualAge C++ para Windows Versión 4:
 
      db2set DB2_SQLROUTINE_COMPILER_PATH="c:\ibmcppw40\bin\setenv.bat"

Nota:
Para estos mandatos, se asume que el compilador C++ está instalado en la unidad c:. Si es necesario, cambie la unidad o la vía de acceso, para que refleje la ubicación del compilador C++ en el sistema.

En los sistemas operativos basados en UNIX, DB2 generará el archivo script ejecutable $HOME/sqllib/function/routine/sr_cpath (que contiene los valores por omisión para las variables del entorno del compilador) la primera vez que compile un procedimiento almacenado. Es posible editar este archivo si los valores por omisión no son los correctos para el compilador. También puede establecer la variable de registro de DB2 DB2_SQLROUTINE_COMPILER_PATH DB2 para que contenga el nombre completo de la vía de acceso de otro script ejecutable que especifique los valores que desee (vea los ejemplos a continuación).

34.4.3 Personalización del mandato de compilación

La instalación de Application Development Client proporciona un mandato de compilación por omisión que funciona con por lo menos uno de los compiladores a los que cada plataforma da soporte:

   AIX: IBM C Set++ para AIX Versión 3.6.6
   Solaris: SPARCompiler C++ Versiones 4.2 y 5.0
   HP-UX: HP-UX C++ Versión A.12.00
   Linux: GNU/Linux g++ Versión egcs-2.90.27 980315 (egcs-1.0.2 release)
   PTX: ptx/C++ Versión 5.2
   OS/2: IBM VisualAge C++ para OS/2 Versión 3
   Windows NT y Windows 2000: Microsoft Visual C++ Versiones 5.0 y 6.0

Para utilizar otros compiladores o para personalizar el mandato por omisión, establezca la variable de registro de DB2 DB2_SQLROUTINE_COMPILE_COMMAND con un mandato como:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=mandato_compilación

donde mandato_compilación es el mandato de compilación C o C++, incluyendo las opciones y los parámetros necesarios para crear procedimientos almacenados.

En el mandato de compilación, utilice la palabra clave SQLROUTINE_FILENAME para sustituir el nombre de archivo de los archivos SQC, C, PDB, DEF, EXP, registro de mensajes y de biblioteca compartida generados. Sólo para AIX, utilice la palabra clave SQLROUTINE_ENTRY para sustituir el nombre del punto de entrada.

Nota:
puede utilizar el mandato db2set o el diálogo Opciones de creación de procedimientos almacenados de SQL del Stored Procedure Builder para establecer el valor de esta variable de registro de DB2. La utilización del diálogo Opciones de creación de procedimientos almacenados de SQL elimina la necesidad de acceder físicamente al servidor de bases de datos o de reiniciar el servidor de bases de datos para que los cambios surtan efecto.

A continuación se indican los valores por omisión para DB2_SQLROUTINE_COMPILE_COMMAND para compiladores C o C++ en plataformas de servidor soportadas.

AIX

Para utilizar IBM C para AIX Versión 3.6.6:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlc -H512 -T512 \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \
   -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2

Para utilizar IBM C Set++ para AIX Versión 3.6.6:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=xlC -H512 -T512 \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c -bE:SQLROUTINE_FILENAME.exp \
   -e SQLROUTINE_ENTRY -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -lc -ldb2

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

Nota:
Para compilar procedimientos de SQL de 64 bits en AIX, añada la opción -q64 a los mandatos anteriores.
Para utilizar IBM VisualAge C++ para AIX Versión 4:
   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"

Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:

   $HOME/sqllib/function/routine/sqlproc.icc

Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld
   %DB2PATH%/function/sqlproc.icc"

HP-UX

Para utilizar HP C Compiler Versión A.11.00.03:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc +DAportable +ul -Aa +z \
   -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \
   ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \
   -L$HOME/sqllib/lib -ldb2

Para utilizar HP-UX C++ Versión A.12.00:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC +DAportable +a1 +z -ext \
   -I$HOME/sqllib/include -c SQLROUTINE_FILENAME.c; \
   ld -b -o SQLROUTINE_FILENAME SQLROUTINE_FILENAME.o \
   -L$HOME/sqllib/lib -ldb2

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

Linux

Para utilizar GNU/Linux gcc Versión 2.7.2.3:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2

Para utilizar GNU/Linux g++ Versión egcs-2.90.27 980315 (release egcs-1.0.2):

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=g++ \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -shared -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib -ldb2

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

PTX

Para utilizar ptx/C Versión 4.5:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -KPIC \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \
   cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME

Para utilizar ptx/C++ Versión 5.2:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=c++ -KPIC \
   -D_RWSTD_COMPILE_INSTANTIATE=0
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -G -o SQLROUTINE_FILENAME.so -L$HOME/sqllib/lib -ldb2 ; \
   cp SQLROUTINE_FILENAME.so SQLROUTINE_FILENAME

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

OS/2

Para utilizar IBM VisualAge C++ para OS/2 Versión 3:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="icc -Ge- -Gm+ -W2
   -I%DB2PATH%\include SQLROUTINE_FILENAME.c
   /B\"/NOFREE /NOI /ST:64000\" SQLROUTINE_FILENAME.def
   %DB2PATH%\lib\db2api.lib"

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

Para utilizar IBM VisualAge C++ para OS/2 Versión 4:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"

Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:

   %DB2PATH%\function\routine\sqlproc.icc

Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld
   %DB2PATH%\function\sqlproc.icc"

Solaris

Para utilizar SPARCompiler C Versiones 4.2 y 5.0:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=cc -xarch=v8plusa -Kpic \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \
   -R$HOME/sqllib/lib -ldb2

Para utilizar SPARCompiler C++ Versiones 4.2 y 5.0:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=CC -xarch=v8plusa -Kpic \
   -I$HOME/sqllib/include SQLROUTINE_FILENAME.c \
   -G -o SQLROUTINE_FILENAME -L$HOME/sqllib/lib \
   -R$HOME/sqllib/lib -ldb2

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

Notas:

  1. Se ha añadido la opción de compilador -xarch=v8plusa al mandato de compilador por omisión. Para obtener detalles sobre por qué se ha añadido esta opción, vea 34.8, "Capítulo 12. Creación de aplicaciones Solaris".

  2. Para compilar procedimientos de SQL de 64 bits en Solaris, extraiga la opción -xarch=v8plusa y añada la opción -xarch=v9 a los mandatos anteriores.

Windows NT y Windows 2000

Nota:
No se soportan procedimientos de SQL en Windows 98 ni en Windows 95.

Para utilizar Microsoft Visual C++ Versiones 5.0 y 6.0:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=cl -Od -W2 /TC -D_X86_=1
   -I%DB2PATH%\include SQLROUTINE_FILENAME.c /link -dll
   -def:SQLROUTINE_FILENAME.def /out:SQLROUTINE_FILENAME.dll
   %DB2PATH%\lib\db2api.lib

Éste es el mandato de compilación por omisión si no se establece la variable de registro DB2_SQLROUTINE_COMPILE_COMMAND de DB2.

Para utilizar IBM VisualAge C++ para Windows Versión 3.6:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="ilib /GI
   SQLROUTINE_FILENAME.def & icc -Ti -Ge- -Gm+ -W2
   -I%DB2PATH%\include SQLROUTINE_FILENAME.c
   /B\"/ST:64000 /PM:VIO /DLL\" SQLROUTINE_FILENAME.exp
   %DB2PATH%\lib\db2api.lib"

Para utilizar IBM VisualAge C++ para Windows Versión 4:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld"

Si no se especifica el archivo de configuración detrás del mandato vacbld, DB2 creará el archivo de configuración por omisión siguiente en el primer intento de crear cualquier procedimiento de SQL:

   %DB2PATH%\function\routine\sqlproc.icc

Si desea utilizar su propio archivo de configuración, puede especificarlo al establecer el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND="vacbld
   %DB2PATH%\function\sqlproc.icc"

Para volver a las opciones de compilador por omisión, establezca el valor de registro de DB2 para DB2_SQLROUTINE_COMPILE_COMMAND en nulo mediante el mandato siguiente:

   db2set DB2_SQLROUTINE_COMPILE_COMMAND=

34.4.4 Conservación de archivos intermedios

Cuando un procedimiento de SQL no se cree satisfactoriamente, deberá suprimir de forma manual los archivos intermedios que puedan quedar. Estos archivos se encuentran en los directorios siguientes:

UNIX
$DB2PATH/function/routine/sqlproc/$DATABASE/$SCHEMA/tmp

donde $DB2PATH representa el directorio en que se ha creado la instancia, $DATABASE represente el nombre de la base de datos y $SCHEMA representa el nombre de esquema con el que se han creado los procedimientos de SQL.

OS/2 y Windows
%DB2PATH%\function\routine\sqlproc\%DATABASE%\% SCHEMA%\tmp

donde %DB2PATH% representa el directorio en el que se ha creado la instancia, %DATABASE% representa el nombre de la base de datos y %SCHEMA% representa el nombre de esquema con el que se han creado los procedimientos de SQL.

34.4.5 Copia de seguridad y restauración

Cuando se crea un procedimiento de SQL, la biblioteca/DLL compartida que se genera también se guarda en la tabla de catálogos si la biblioteca/DLL compartida que se genera es menor que 2 MB. Cuando se realiza una copia de seguridad de la base de datos y se restaura, esto se realizará con la versión guardada en la tabla de catálogos para todos los procedimientos de SQL con una biblioteca/DLL compartida generada menor que 2 MB. Si tiene procedimientos de SQL con una biblioteca/DLL compartida generada mayor que 2 MB, asegúrese de que también realice una copia de seguridad y una restauración del sistema de archivos junto con la copia de seguridad y restauración de la base de datos. En caso contrario, tendrá que volver a crear la biblioteca/DLL compartida del procedimiento de SQL manualmente, utilizando la fuente de la tabla de catálogos syscat.procedures.

Nota:
En el momento de recuperación de la base de datos, se eliminarán todos los ejecutables de procedimientos de SQL del sistema de archivos que pertenezcan a la base de datos que se recupera. Si el parámetro de configuración de creación de índices (indexrec) está establecido en RESTART, en la próxima conexión todos los ejecutables de procedimientos de SQL se extraerán de la tabla de catálogos y se volverán a colocar en el sistema de archivos. En caso contrario, los ejecutables de SQL se extraerán cuando se ejecuten los procedimientos de SQL por primera vez.
Los ejecutables volverán a colocarse en el directorio siguiente:

UNIX
$DB2PATH/function/routine/sqlproc/$DATABASE

donde $DB2PATH representa el directorio en que se ha creado la instancia y $DATABASE representa el nombre de base de datos con que se han creado los procedimientos de SQL.

OS/2 y Windows
%DB2PATH%\function\routine\sqlproc\%DATABASE%

donde %DB2PATH% representa el directorio en el que se ha creado la instancia, %DATABASE% representa el nombre de la base de datos con el que se han creado los procedimientos de SQL.

34.4.6 Creación de procedimientos de SQL

Establezca el parámetro de configuración del gestor de bases de datos KEEPDARI en 'NO' para desarrollar procedimientos de SQL. Si un procedimiento de SQL se mantiene cargado una vez que se ha ejecutado, se pueden experimentar problemas al eliminar y volver a crear el procedimiento almacenado con el mismo nombre, puesto que la biblioteca no se puede renovar y los ejecutables no se pueden eliminar del sistema de archivos. También tendrá problemas si intenta retrotraer los cambios o eliminar la base de datos, ya que los ejecutables no se pueden suprimir.

Para obtener más información sobre el establecimiento del parámetro KEEPDARI, consulte el apartado 'Updating the Database Manager Configuration File' en "Chapter 2. Setup" de la publicación 'Application Building Guide'.

Nota:
Los procedimientos de SQL no soportan los tipos de datos siguientes para los parámetros:

34.4.7 Llamada de procedimientos almacenados

El primer párrafo de 'Utilización del mandato CALL' debe ser:

Para utilizar el mandato call, debe entrar el nombre del procedimiento almacenado junto con los parámetros IN o INOUT, además de '?' como área de retención de posición para cada parámetro OUT. Para conocer detalles sobre la sintaxis del mandato CALL, consulte el apartado 10.14, "CALL".

34.4.8 Distribución de procedimientos de SQL compilados

Nota:
Para distribuir procedimientos de SQL compilados entre servidores DB2, deberá llevar a cabo los pasos siguientes para cada servidor DB2 que sirve como fuente o como destino de un procedimiento de SQL compilado:

Paso  1.

Instale el FixPak 3

Paso  2.

Emita el mandato db2updv7 para habilitar DB2 para extraer e instalar procedimientos de SQL compilados:

     db2updv7 -d nombre_basedatos 

Cuando se define un procedimiento de SQL, se convierte en un programa C, se precompila, se vincula frente a la base de datos de destino, se compila y se enlaza para crear una biblioteca compartida. Los pasos de compilación y enlace requieren que haya un compilador C o C++ disponible en la máquina servidor de bases de datos. Sin embargo, una vez que se haya definido un procedimiento de SQL, puede distribuirse en formato compilado a bases de datos DB2 que se ejecutan en la misma plataforma pero no necesariamente tienen acceso a un compilador C o C++. DB2 permite al usuario extraer procedimientos de SQL en formato compilado de una base de datos e instalarlos en formato compilado en otra base de datos.

DB2 proporciona una interfaz de línea de mandatos y una interfaz de programación para las operaciones de extracción e instalación. La interfaz de línea de mandatos consta de dos mandatos CLP: GET ROUTINE y PUT ROUTINE. La interfaz programática consta de dos procedimientos almacenados incorporados: GET_ROUTINE_SAR y PUT_ROUTINE_SAR. Para obtener más información sobre la interfaz de línea de mandatos, consulte el manual Consulta de mandatos. Para obtener más información sobre la interfaz de programación, consulte el manual Consulta de SQL.

Para distribuir un procedimiento de SQL compilado de un servidor de bases de datos a otro, lleve a cabo los pasos siguientes:

Paso  1.

Desarrolle la aplicación, incluyendo la definición de los procedimientos de SQL que formen parte de la aplicación.

Paso  2.

Después de probar los procedimientos, extraiga la versión compilada de cada procedimiento en un archivo diferente. Para obtener más información, consulte el mandato GET ROUTIN del manual Consulta de mandatos o el procedimiento almacenado GET_ROUTINE_SAR del manual Consulta de SQL.

Paso  3.

Instale la versión compilada de cada procedimiento en cada servidor, emitiendo el mandato PUT ROUTINE o invocando el procedimiento almacenado PUT_ROUTINE_SAR, utilizando los archivos creados por el Paso 2. Cada servidor de bases de datos debe tener el mismo sistema operativo y nivel de DB2.


[ Principio de página | Página anterior | Página siguiente ]