如何从存储过程中调用程序?

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.