【问题标题】:call RPGLE program from SQL within PHP / Zend Framework在 PHP / Zend 框架中从 SQL 调用 RPGLE 程序
【发布时间】:2012-05-02 20:20:38
【问题描述】:

我们在库 LMTLIB 中创建了一个 AS400 RPGLE 程序,称为 ARTEST。

它有一个数字 inout 参数,它只返回 2

$myVar = "1";

$db = Zend_Registry::get('config')->resources->multidb->as400;

$abstractAdapter = new Zend_Db_Adapter_Db2($db);

//Gives the message "Invalid bind-variable position 'myVar'"
$sql = 'CALL QSYS.QCMDEXC(\'CALL LMTLIB.ARTEST PARM(?)\', 0000000026.00000)';

//Gives the message "Token PARM was not valid. Valid tokens: ( INTO USING. SQLCODE=-104"    
$sql = 'CALL LMTLIB.ARTEST PARM(?)';

//Gives the message "ARTEST in LMTLIB type *N not found. SQLCODE=-204"
$sql = 'CALL LMTLIB.ARTEST (?)';

$stmt = new Zend_Db_Statement_Db2($abstractAdapter, $sql);

$stmt->bindParam('myVar', $myVar, 4, 1);

$stmt->execute();

现在,我可以理解为什么第三条 SQL 语句会失败并显示“未找到”消息……因为它不是表/文件,而是 RPGLE 程序。

令人恼火的是,如果我删除 (?),并简单地放入 (1)... SQL 调用似乎是成功的,并且 RPGLE 程序显示它已被调用。但是,我无法看到程序的响应是什么。

提前感谢您的帮助!

【问题讨论】:

    标签: php sql zend-framework call ibm-midrange


    【解决方案1】:

    通常,数据库管理器使用 CALL 语句来调用存储过程。当它这样做时,它会查找参数签名与 CALL 签名匹配的存储过程。

    如果没有具有该名称和签名的存储过程,则数据库管理器会尝试调用程序。同样,发生了一个参数匹配过程。

    http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstcallsta.htm

    我建议创建一个存储过程,以便您可以正确匹配参数。

    【讨论】:

    • 看起来好像它与 Zend 一起工作。只有一条建议:当我在 db2/400 上使用 php 和 odbc 时,我不得不发现 php_odbc 不支持输出参数。
    【解决方案2】:

    IBM RPGLE 可以通过 Web 服务调用与 Zend 框架交互。

    Scott Klement 介绍了这个 here. 的一些基础知识

    根据您的应用程序,这可能是与 RPG 代码交互的最佳方式。可以使 Web 服务调用许多 RPG 程序和 iSeries 表,并返回一个满足的结果集。 Zend 会认为这与任何其他 RESTful 调用相同,可以由您的模型处理。

    【讨论】:

      猜你喜欢
      • 2011-09-09
      • 1970-01-01
      • 2011-03-20
      • 2010-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-29
      • 2010-10-12
      相关资源
      最近更新 更多