db2 - 如何从存储过程中调用程序?
问题描述
我已经按照堆栈交换的其他示例从存储过程中调用内置程序,但继续出现错误。
处理这个例子(寻找一个包装在外部 SQL 存储过程中的任何 OS/400 API 的工作示例,包装在用户定义的 SQL 函数中)我构建了以下内容以尝试创建一个包装器命令以允许我更改对象安全性(我的问题是我创建的对象(无论库如何)在我的某些功能中并不总是可供其他人访问,我必须手动设置为一个公共安全组。
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');
我收到以下错误:
未找到 QSYS 中的外部程序 CHGOBJOWN
但是已经确认转到终端仿真器的 CL 并键入 QSYS/CHGOBJOWN 会将我带入参数输入屏幕
解决方案
您正在尝试将命令定义为程序,但这是行不通的。命令对象 (*CMD) 和程序对象 (*PGM) 是两个不同的东西,不能以相同的方式调用。一切都没有丢失。有一个允许您执行命令的 DB2 服务。您只需要构建正确的命令字符串。
您可以像这样调用现有的 DB2 服务,而不是定义存储过程:
call qsys2.qcmdexec('CHGOBJOWN OBJ(XX/TBL1) OBJTYPE(*FILE) NEWOWN(GRPFRIENDS)');
有一个完整的服务列表。文档可以在这里找到。
推荐阅读
- php - ID匹配或在另一个表中有引用的MySQL查询
- javascript - 如何在 React 输入字段上以编程方式触发模糊、聚焦、单击和选择事件?
- javascript - 如何将 lodash 函数转换为 ES6?
- c++ - 是否可以使用 for-each 循环比较数组中的两个变量?
- ionic-framework - 如何使我的自定义 SVG 图标正确显示?(Inkscape,离子 4)
- powerbi - 在总列中取单个值,而不是对重复值求和
- spring - spring boot 处理大请求体 - 通过多线程处理批量
- python - 如何拆分 OpenCV 中检测到的轮廓?
- spring - 多个数据源和多个配置文件
- swiftui - 自 Xcode beta 2 以来调用 PresentationButton 的新方法如何?