【问题标题】:call program in interactive sql as400在交互式 sql as400 中调用程序
【发布时间】:2021-07-22 16:12:27
【问题描述】:

有没有办法从 as400 (strsql) 中的 db2 交互式 SQL 调用程序?该程序通过引用接收参数并修改其内容。在 CL 中,您只需这样称呼它:

call myprogram 12345

我需要能够在交互式 SQL 中调用它,有什么方法或解决方法可以做到这一点吗?就像启动操作系统命令一样?例如,在 C 中,您执行系统(“您的系统命令”)。我找不到任何相关的东西。

【问题讨论】:

标签: db2 ibm-midrange db2-400


【解决方案1】:

STRSQL 支持 SQL CALL 语句。

最好的选择是将程序定义为外部 SQL 存储过程

--note 
----- numeric-->zoned decimal
----- decimal-->packed decimal
CREATE PROCEDURE MYLIB.MYPROGRAM_SP 
  (IN number numeric(5,0))  
LANGUAGE RPGLE
EXTERNAL NAME 'MYLIB/MYPROGRAM'
PARAMETER STYLE GENERAL;

那你可以
CALL MYLIB.MYPROGRAM_SP(12345)

从技术上讲,IBM i 上的每个 *PGM 对象都是一个存储过程。您可以在不明确定义的情况下调用它,如上所示。但是在这种情况下,对参数进行了假设。最好为数据库提供接口定义。

请注意,STRSQL 是一个已有 20 年历史的工具,它有各种限制,包括不支持存储过程的 OUT 或 INOUT 参数。

更好的选择是使用IBM's Access Client Solutions (ACS) 的运行 SQL 脚本组件

【讨论】:

  • 我可以调用它... INOUT 参数,类似于通过引用传递参数?也就是说,不可能从STRSQL中发送一个变量,让程序修改它的内容吗?
  • 您可以发送它,但 STRSQL 不会显示更改后的值。 ACS 可以并且愿意。
  • 我开始使用 ACS 并创建了 SP。一个参数实际上是一个字符数组。如果我将其声明为 IN,则不会引发任何错误,但不会反映更改。如果我将它声明为 INOUT varchar(30),当我调用它时会显示一个溢出错误。我正在调用的程序只写入前 20 个字节。你可能知道这可能是什么原因吗?我这样称呼它: CREATE VARIABLE MYVAR varchar(30) ;设置 MYVAR='1234567890123456789_';调用 MYLIB.MYPROG_SP(MYVAR);
  • 我用 CHARACTER(30) 替换了 varchar 并且它起作用了。你的帖子很有帮助。非常感谢。
  • 您在存储过程中定义的 Parma 必须与程序所期望的匹配。
猜你喜欢
  • 2014-10-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多