ADMIN_COMMAND_DSN 存储过程

SYSPROC.ADMIN_COMMAND_DSN 存储过程执行 更改开始BIND、REBIND、FREE或DCLGEN更改结束 DSN子命令,并返回DSN子命令执行的输出。

环境

开始通用编程接口信息。

ADMIN_COMMAND_DSN在WLM建立的存储过程地址空间中运行。 TCB=1 也是必需的。

授权

要执行CALL语句,包含CALL语句的程序包或计划的所有者必须具有以下一项或多项权限:

  • ADMIN_COMMAND_DSN存储过程中的EXECUTE权限
  • 存储过程的所有权
  • SYSADM 权限

要执行DSN子命令,您必须使用包含执行DSN子命令授权的权限集。

语法

下面的语法图显示了调用此存储过程的SQL CALL语句:

阅读语法图跳过可视化语法图CALLSYSPROC.ADMIN_COMMAND_DSN(DSN子命令,消息)

选项说明

DSN子命令
指定要执行的DSN子命令。 如果传递给存储过程的DSN子命令不是 更改开始BIND、REBIND、FREE或DCLGEN更改结束 ,则返回错误消息。 DSN子命令使用调用存储过程的用户授权ID执行。

如果包名称中指定了通配符,ADMIN_COMMAND_DSN不支持三部分名称。

此参数区分大小写。 您必须以大写字母指定 DSN子命令

这是一个VARCHAR(32704)类型的输入参数,不能为空。

消息
在存储过程执行期间发生错误时包含消息。

如果消息不为空,存储过程可能不会返回结果集。 即使 message 不为空,如果在存储过程执行至少一个 DSN 子命令后发生了 message 中描述的错误,则存储过程可能返回结果集,并且存储过程可以成功地将 DSN 子命令输出消息插入结果集中并打开结果集游标。

空白信息并不意味着数据源名称(DSN)子命令成功完成。 调用应用程序必须读取结果集,以确定DSN子命令是否成功。

这是一个VARCHAR(1331)类型的输出参数。

示例

以下C语言示例展示了如何调用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;
 }

输出

如果发生错误,此存储过程将返回一条错误消息

存储过程返回一个结果集,其中包含DSN子命令的输出信息。

下表显示了创建的全局临时表中返回的结果集格式 SYSIBM.DSN_SUBCMD_OUTPUT:

表 1. ADMIN_COMMAND_DSN结果集的行结果集
列名 数据类型 内容
ROWNUM INTEGER 表格行的序列号,从1 到n
TEXT VARCHAR(255) DSN子命令输出消息行

通用编程接口信息结束。