【发布时间】:2015-02-18 19:21:09
【问题描述】:
我终于明白了 SQL 存储过程和基于 RPG 或任何其他 AS400 对象的外部存储过程之间的区别。 现在我尝试添加调用语句来执行外部存储过程,它只有一个out参数,由RPG程序生成,如下所示。
PHP:
$server="server";
$user="user";
$pass="pass";
$connect = db2_connect($server,$user,$pass);
$RTVTYP = "D";
$RTRNFLD = "";
$strSql = 'CALL LIB.TEST_SP(?,?)';
$stmt = db2_prepare($connect, $strSql);
db2_bind_param($stmt, 1, "RTVTYP", DB2_PARAM_IN, DB2_CHAR);
db2_bind_param($stmt, 2, "RTRNFLD", DB2_PARAM_OUT, DB2_CHAR);
$result = db2_execute($stmt);
print $result;
print $RTRNFLD;
db2_close($connect);
RPG程序员给了我代码,她说她用Surveyor/400转换成外部存储过程。
角色扮演游戏:
d rpgprogram pr
d rtvtyp_ like(rtvtyp)
d rpgprogram pi
d rtvtyp 1
/free
exsr initial;
exsr process;
exec sql set result sets array :web_data for 1 rows;
return;
//***************************************************
begsr process;
select;
when rtvtyp = 'D';
rtrnfld = 'Dog';
when rtvtyp = 'C';
rtrnfld = 'Cat';
other;
rtrnfld = 'Invalid';
endsl;
endsr;
begsr initial;
w1size = %size(m2errds:*all);
p2err = %alloc(w1size);
clear m2errds;
endsr;
/end-free
Surveyor/400 的 DDL:
LIB.TEST_SP
General
Procedure: TEST_SP
Maximum number of result sets:1
Data access: MOdifies SQL data
Specific name: TEST_SP
Parameters
RTVTYP Character 1 IN
RTRNFLD Character 10 OUT
Parameter style:
Simple, no null values allowed
External Program
Program: rpgprogram
Schema: LIB
Language: RPGLE
连接成功,$result 返回为“1”,但没有 $RTRNFLD 返回。
感谢您的帮助,
【问题讨论】:
-
这是整个 PHP 脚本吗?您能否发布定义存储过程的 SQL DDL?另外,RPG代码中的参数列表?只需编辑您的问题并添加即可。如果不查看所有部分,很难判断问题出在哪里。
-
感谢您的快速回复。 “外部”存储过程已由其他 Java 程序运行以执行该过程。所以这一行RPG代码内毫无疑问。是的,我可以使用与此处相同的方式从 PHP 调用此行 RPG 程序 $result=db2_exec($connect, "Call LIB.RPGProgram");但只要它被 Linoma Software 的 Surveyor/400 转换为外部存储过程,我就不能调用它。谢谢,
-
感谢您的快速回复。
-
您是否检查了 RPG 和外部过程定义之间的参数不匹配?似乎外部存储过程正在寻找两个参数,而程序只有一个。
标签: php zend-framework stored-procedures ibm-midrange rpg