PB开发中遇到一些问题

asjoyray 2007-06-08 09:51:03
1、如何在PB前台程序中调用DB2存储过程(无输入参数或有输入参数或既有输入参数又有输出参数)?

PB程序脚本:
string as_id_schd_size
int ai_seq_schd_size

DECLARE p_sample DYNAMIC PROCEDURE FOR SQLSA ;
PREPARE SQLSA FROM "US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=:as_id_schd_size,@ISI_SEQ_SCHD_SIZE=:ai_seq_schd_size)";
EXECUTE DYNAMIC p_sample using :as_id_schd_size,:ai_seq_schd_size;
if sqlca.sqlcode <> 0 then
messagebox(string(sqlca.sqlcode) ,sqlca.sqlerrtext)
rollback using sqlca;
messagebox('提示','执行存储过程出错,请与系统维护人员联系!')
end if
close p_sample ;
if sqlca.sqlcode <> 0 then
messagebox(string(sqlca.sqlcode) , sqlca.sqlerrtext)
rollback using sqlca;
messagebox('提示','关闭存储过程出错,请与系统维护人员联系!')
end if

编译没有问题,运行后有如下报错:
sqlca.sqlcode=100
执行存储过程出错,请与系统维护人员联系!
Procedure has not been executed or has no results
关闭存储过程出错,请与系统维护人员联系!

但该存储过程在DB2命令窗口中用CALL调用运行没有任何问题。
注:该存储过程只有输入参数,没有输出参数。

2、如何在PB前台程序中调用DB2函数、如何获得返回值?
...全文
405 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
da21 2007-06-09
  • 打赏
  • 举报
回复
"US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=:as_id_schd_size,@ISI_SEQ_SCHD_SIZE=:ai_seq_schd_size)";
改为:
"US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=?,@ISI_SEQ_SCHD_SIZE=?)";
AFIC 2007-06-09
  • 打赏
  • 举报
回复
我的存储过程没有输出参数,还需要写fetch吗?

--------------
当然不用
asjoyray 2007-06-09
  • 打赏
  • 举报
回复
AFIC(A Fool In China) ( ) 信誉:100 Blog 加为好友 2007-6-8 22:09:22 得分: 0



1这是正确的,因为只有输入参数,没有输出参数,
相当于sql语句没有返回结果,sqlcode就是100,这没问题。

2close之前fetch p_sample into :xxx,:xxxxx;
即可。


----------------------------------
我的存储过程没有输出参数,还需要写fetch吗?
asjoyray 2007-06-09
  • 打赏
  • 举报
回复
da21(遇见) ( ) 信誉:100 Blog 加为好友 2007-6-9 12:02:43 得分: 0

"US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=:as_id_schd_size,@ISI_SEQ_SCHD_SIZE=:ai_seq_schd_size)";
改为:
"US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=?,@ISI_SEQ_SCHD_SIZE=?)";

---------------------------------------------------------------------------------

若将PREPARE SQLSA FROM "US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=:as_id_schd_size,@ISI_SEQ_SCHD_SIZE=:ai_seq_schd_size)";
改为PREPARE SQLSA FROM "US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE=?,@ISI_SEQ_SCHD_SIZE=?)";
运行提示:
SQLSTATE=42601
[IBM][CLIDriver][DB2/NT]SQL0104N在"BEGIN-OF-STATEMENT"之后发现意外的标记"US_OP.OP_SAMPLE( @IC_ID_SCHD_SIZE="。期望的标记可能包括:"<values>"。SQLSTATE=42601
AFIC 2007-06-08
  • 打赏
  • 举报
回复
1这是正确的,因为只有输入参数,没有输出参数,
相当于sql语句没有返回结果,sqlcode就是100,这没问题。

2close之前fetch p_sample into :xxx,:xxxxx;
即可。

754

社区成员

发帖
与我相关
我的任务
社区描述
PowerBuilder 数据库相关
社区管理员
  • 数据库相关社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧