如何从存储过程中调用程序?
How can you call programs from a stored procedure?
我按照堆栈交换的其他示例从存储过程调用内置程序,但仍然出现错误。
处理此示例 (Looking for a working example of any OS/400 API wrapped in an external SQL stored procedure wrapped in a user defined SQL function) 我构建了以下内容以尝试创建包装器命令以允许我更改对象安全性(我的问题是我创建的对象,无论库如何)并不总是在我的一些功能中被其他人访问,我必须手动设置一个普通的安全组。
CREATE OR REPLACE PROCEDURE XX.TST( IN XOBJ CHAR(32), IN XOBJTYPE CHAR(10), IN XNEWOWN CHAR(10))
LANGUAGE CL
SPECIFIC XX.TST
NOT DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
EXTERNAL NAME 'QSYS/CHGOBJOWN'
PARAMETER STYLE GENERAL;
CALL XX . TST('XX/TBL1','*FILE','GRPFRIENDS');
我收到以下错误:
External program CHGOBJOWN in QSYS not found
但已确认进入终端仿真器的 CL 并键入 QSYS/CHGOBJOWN 会将我带入参数输入屏幕
您正试图将命令定义为程序,但这行不通。命令对象 (*CMD) 和程序对象 (*PGM) 是两个不同的东西,不能以相同的方式调用。尽管如此,一切都没有丢失。有一个 DB2 服务允许您执行命令。您只需要构建正确的命令字符串即可。
您可以像这样调用现有的 DB2 服务,而不是定义存储过程:
call qsys2.qcmdexec('CHGOBJOWN OBJ(XX/TBL1) OBJTYPE(*FILE) NEWOWN(GRPFRIENDS)');
有一整套服务。可以找到文档 here.
我按照堆栈交换的其他示例从存储过程调用内置程序,但仍然出现错误。
处理此示例 (Looking for a working example of any OS/400 API wrapped in an external SQL stored procedure wrapped in a user defined SQL function) 我构建了以下内容以尝试创建包装器命令以允许我更改对象安全性(我的问题是我创建的对象,无论库如何)并不总是在我的一些功能中被其他人访问,我必须手动设置一个普通的安全组。
CREATE OR REPLACE PROCEDURE XX.TST( IN XOBJ CHAR(32), IN XOBJTYPE CHAR(10), IN XNEWOWN CHAR(10))
LANGUAGE CL
SPECIFIC XX.TST
NOT DETERMINISTIC
NO SQL
CALLED ON NULL INPUT
EXTERNAL NAME 'QSYS/CHGOBJOWN'
PARAMETER STYLE GENERAL;
CALL XX . TST('XX/TBL1','*FILE','GRPFRIENDS');
我收到以下错误:
External program CHGOBJOWN in QSYS not found
但已确认进入终端仿真器的 CL 并键入 QSYS/CHGOBJOWN 会将我带入参数输入屏幕
您正试图将命令定义为程序,但这行不通。命令对象 (*CMD) 和程序对象 (*PGM) 是两个不同的东西,不能以相同的方式调用。尽管如此,一切都没有丢失。有一个 DB2 服务允许您执行命令。您只需要构建正确的命令字符串即可。
您可以像这样调用现有的 DB2 服务,而不是定义存储过程:
call qsys2.qcmdexec('CHGOBJOWN OBJ(XX/TBL1) OBJTYPE(*FILE) NEWOWN(GRPFRIENDS)');
有一整套服务。可以找到文档 here.