PB 调用存储过程就这么难吗?

helysan 2004-08-12 12:05:08
存储过程为:
create or replace procedure insurance.updatemedinfo(inp_no in varchar2,icd10_code in varchar2,icd10_text in varchar2,treat_result in varchar2,operation_code1 in varchar2,operation_code2 in varchar2) is
vinpno varchar2(6);
icdcode varchar2(7);
icdtext varchar2(30);
oprcode1 varchar2(7);
oprcode2 varchar2(7);
result char(1);
haveopr char(1);
recnum int;
oprcode varchar2(15);
exec_flag varchar2(5);
error_info varchar2(50);

begin
if( inp_no is null) then
begin
exec_flag :='1';
error_info :='The value of inp_no should not be null';
return;
end;
end if;

。。。。。
end;

==================================
pb 脚本如下:

string ls_icd,ls_patno
string ls_icdcode,ls_icdname,ls_result
string ls_opcode,ls_opname
string ls_opcode1,ls_opname1


gt_disfile.AutoCommit = True
DECLARE msg_proc PROCEDURE FOR INSURANCE.updatemedinfo :ls_patno, :ls_icdname, :ls_icdcode, :ls_result, :ls_opcode, :ls_opcode1
USING gt_disfile ;
EXECUTE msg_proc ;
gt_disfile.AutoCommit = False
MessageBox(gt_disfile.SQLErrText)

报错信息是:
“wrong number or type of arguments in calling insurance.updatemedinfo line 1 column 15”

我在sqlplus 里调用这个存储过程,比如:
call insurance.updatemedinfo '223','2222','2343','1','ttt','tttt'

是成功的。
我不是搞pb的,是和别的公司合作时留下的烂摊子。请高手不吝赐教。
...全文
475 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
jiangjildy 2004-08-12
  • 打赏
  • 举报
回复
你看一下联机文档里的例子,你调用的格式不对,把格式弄对再说.
helysan 2004-08-12
  • 打赏
  • 举报
回复
感谢各位的帮办。我用的是c++和c#,今天首次调试一个pb存储过程,弄得我狼狈不勘。好在在大家的帮助下,最后糊里糊涂地就把程序调试过了。大家接分吧。呵呵。不过我奉劝大家还是放弃pb吧。感觉这个语言受微软的支持不够,到底是后娘养的,还是微软的亲儿女受照顾。pb感觉太土了。但是据说功能强大,也许存在就是合理的。
helysan 2004-08-12
  • 打赏
  • 举报
回复
DECLARE msg_proc PROCEDURE FOR INSURANCE.updatemedinfo
(:ls_patno,:ls_icdcode,:ls_icdname,:ls_result,:ls_opcode,:ls_opcode1,:ls_flag,:ls_error) USING gt_disfile;
//说明:pb帮助中{}的内容时可选的,{}本身不是脚本的一部分,只是提示里面的内容可以省略而已。省略的时候默认使用sqlca作为使无对象,因为你不用sqlca,所以你不要省略
================================================
我修改以后,就是抱错:错误的参数类型或数量,看来我的参数没有传递过去。
sun1976 2004-08-12
  • 打赏
  • 举报
回复
DECLARE msg_proc PROCEDURE FOR INSURANCE.updatemedinfo
(:ls_patno,:ls_icdcode,:ls_icdname,:ls_result,:ls_opcode,:ls_opcode1,:ls_flag,:ls_error) USING gt_disfile;
//说明:pb帮助中{}的内容时可选的,{}本身不是脚本的一部分,只是提示里面的内容可以省略而已。省略的时候默认使用sqlca作为使无对象,因为你不用sqlca,所以你不要省略
helysan 2004-08-12
  • 打赏
  • 举报
回复
DECLARE msg_proc PROCEDURE FOR INSURANCE.updatemedinfo
(:ls_patno,:ls_icdcode,:ls_icdname,:ls_result,:ls_opcode,:ls_opcode1,:ls_flag,:ls_error) {USING gt_disfile};
执行时报错: 语法错误。
cxwsoftware 2004-08-12
  • 打赏
  • 举报
回复
帮你顶!
zhaoyy 2004-08-12
  • 打赏
  • 举报
回复
DECLARE f_fh_name_bm PROCEDURE FOR f_fh_name(:参数1,:参数2,......,:参数N) ;
EXECUTE f_fh_name_bm;
FETCH f_fh_name_bm INTO :返回值1,:返回值2,....:返回值N;
CLOSE f_fh_name_bm;

这是PB8.0调用oracle的语法。
f_fh_name_bm:别名
f_fh_name:oracle中的存储过程名
NORTHCHERT 2004-08-12
  • 打赏
  • 举报
回复
点MOUSE右键,直接粘调用语句
helysan 2004-08-12
  • 打赏
  • 举报
回复
我用的是oracle 数据库,难道就少一个括号吗?exec 逻辑名,还是 exec 例程名;
exec 例程名(:参数1,参数2,...)对吗?
jiangjildy 2004-08-12
  • 打赏
  • 举报
回复
Example 1 This statement declares the Sybase ASE procedure Emp_proc for the database specified in the default transaction object. It references the Emp_name_var and Emp_sal_var variables, which must be set to appropriate values before you execute the EXECUTE Emp_proc command:

DECLARE Emp_proc procedure for GetName

@emp_name = :Emp_name_var,

@emp_salary = :Emp_sal_var ;

Example 2 This statement declares the ORACLE procedure Emp_proc for the database specified in the default transaction object. It references the Emp_name_var and Emp_sal_var variables, which must be set to appropriate values before you execute the EXECUTE Emp_proc command:

DECLARE Emp_proc procedure for GetName

(:Emp_name_var, :Emp_sal_var) ;
lzheng2001 2004-08-12
  • 打赏
  • 举报
回复
你用什么数据库?
helysan 2004-08-12
  • 打赏
  • 举报
回复
应该怎么调,写出来告诉我呀

740

社区成员

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

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