Procedimiento almacenado ADMIN_COMMAND_DSN
El procedimiento almacenado SYSPROC.ADMIN_COMMAND_DSN ejecuta un
ENLACE, REENLACE, LIBERACIÓN o DCLGEN
Subcomando DSN y devuelve la salida de la ejecución del subcomando DSN.
Entorno
ADMIN_COMMAND_DSN se ejecuta en un espacio de direcciones de procedimientos almacenados establecido por WLM. TCB=1 también es necesario.
Autorización
Para ejecutar la instrucción CALL, el propietario del paquete o plan que contiene la instrucción CALL debe tener uno o más de los siguientes privilegios:
- El privilegio EXECUTE en el procedimiento almacenado ADMIN_COMMAND_DSN
- Propiedad del procedimiento almacenado
- Autorización SYSADM
Para ejecutar el subcomando DSN, debe utilizar un conjunto de privilegios que incluya la autorización para ejecutar el subcomando DSN.
Sintaxis
El siguiente diagrama de sintaxis muestra la sentencia CALL de SQL para invocar este procedimiento almacenado:
Descripciones de opciones
- Subcomando DSN
- Especifica el subcomando DSN que se va a ejecutar. Si el subcomando DSN pasado al procedimiento almacenado no es un
BIND, REBIND, FREE o DCLGEN
, se devuelve un mensaje de error. El subcomando DSN se ejecuta utilizando el ID de autorización del usuario que invocó el procedimiento almacenado.ADMIN_COMMAND_DSN no admite nombres de tres partes si se especifica un carácter comodín en el nombre del paquete.
Este parámetro es sensible a las mayúsculas y minúsculas. Debe especificar el subcomando DSN en mayúsculas.
Este es un parámetro de entrada de tipo VARCHAR(32704) y no puede ser nulo.
- Mensaje
- Contiene mensajes si se produce un error durante la ejecución del procedimiento almacenado.
El procedimiento almacenado podría no devolver un conjunto de resultados si el mensaje no está en blanco. Incluso si el mensaje no está en blanco, el procedimiento almacenado podría devolver un conjunto de resultados si el error descrito en el mensaje se produjo después de que el procedimiento almacenado ejecutara al menos un subcomando DSN, y el procedimiento almacenado puede insertar correctamente el mensaje de salida del subcomando DSN en el conjunto de resultados y abrir el cursor del conjunto de resultados.
Un mensaje en blanco no significa que el subcomando DSN se haya completado correctamente. La aplicación de llamada debe leer el conjunto de resultados para determinar si el subcomando DSN se ha realizado correctamente o no.
Este es un parámetro de salida de tipo VARCHAR(1331).
Ejemplo
El siguiente ejemplo en lenguaje C muestra cómo invocar ADMIN_COMMAND_DSN:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
/******************** DB2 SQL Communication Area ********************/
EXEC SQL INCLUDE SQLCA;
int main( int argc, char *argv[] ) /* Argument count and list */
{
/****************** DB2 Host Variables ****************************/
EXEC SQL BEGIN DECLARE SECTION;
/* SYSPROC.ADMIN_COMMAND_DSN parameters */
char subcmd[32705]; /* BIND, REBIND, FREE, or */
/* DCLGEN DSN subcommand */
char errmsg[1332]; /* Error message */
/* Result set locators */
volatile SQL TYPE IS RESULT_SET_LOCATOR *rs_loc1;
/* Result set row */
long int rownum; /* Sequence number of the */
/* table row */
char text[256]; /* DSN subcommand output row */
EXEC SQL END DECLARE SECTION;
/******************************************************************/
/* Set input parameter to execute a REBIND PLAN DSN subcommand */
/******************************************************************/
strcpy(subcmd, "REBIND PLAN (DSNACCOB) FLAG(W)");
/******************************************************************/
/* Call stored procedure SYSPROC.ADMIN_COMMAND_DSN */
/******************************************************************/
EXEC SQL CALL SYSPROC.ADMIN_COMMAND_DSN (:subcmd, :errmsg);
/******************************************************************/
/* Retrieve result set when the SQLCODE from the call is +446, */
/* which indicates that result sets were returned */
/******************************************************************/
if (SQLCODE == +466) /* Result sets were returned */
{
/* Establish a link between the result set and its locator */
EXEC SQL ASSOCIATE LOCATORS (:rs_loc1)
WITH PROCEDURE SYSPROC.ADMIN_COMMAND_DSN;
/* Associate a cursor with the result set */
EXEC SQL ALLOCATE C1 CURSOR FOR RESULT SET :rs_loc1;
/* Perform fetches using C1 to retrieve all rows from the */
/* result set */
EXEC SQL FETCH C1 INTO :rownum, :text;
while(SQLCODE==0)
{
EXEC SQL FETCH C1 INTO :rownum, :text;
}
EXEC SQL CLOSE C1;
}
return;
}
Salida
Este procedimiento almacenado devuelve un mensaje de error, mensaje, si se produce un error.
El procedimiento almacenado devuelve un conjunto de resultados que contiene los mensajes de salida del subcomando DSN.
La siguiente tabla muestra el formato del conjunto de resultados devuelto en la tabla temporal global creada SYSIBM.DSN_SUBCMD_OUTPUT:
| Nombre de columna | Tipo de datos | Contenido |
|---|---|---|
| ROWNUM | ENTERO | Número de secuencia de la fila de la tabla, de 1 a n |
| TEXTO | VARCHAR(255) | Línea de mensaje de salida del subcomando DSN |
