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语句:
选项说明
- 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:
| 列名 | 数据类型 | 内容 |
|---|---|---|
| ROWNUM | INTEGER | 表格行的序列号,从1 到n |
| TEXT | VARCHAR(255) | DSN子命令输出消息行 |
