一个奇怪的问题(调用SYBASE数据库已经存在的存储过程)

Xeric2003 2004-11-22 11:52:22
这两天都在为解决这个问题搞得焦头烂额,希望各位XD提供点思路。
问题:data_process是一个已经编写好的过程,完成对一个临时表的数据的格式转化,然后将转换后的结果存入到最终的结果表。
(1)为什么在数据库管理系统中直接调用过程能够完成所有的操作,而在PB中调用却只能执行部分语 句(我当时在下面的PB语句中没有用Rollback命令)?
(2)为什么下面这两段代码执行的结果有很大的不同?
代码(1)
long ret
declare myproc procedure for data_process using sqlca;
execute myproc;
ret=sqlca.sqlcode
if ret >= 0 then
commit using sqlca;
messagebox("提示","操作执行成功!")
else
rollback using sqlca;
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
end if
close myproc;

代码(2)
declare myproc procedure for data_process using sqlca;
execute myproc;
if sqlca.sqlcode >= 0 then
commit using sqlca;
messagebox("提示","操作执行成功!")
else
rollback using sqlca;
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
end if
close myproc;
代码(1)执行时,显示:
操作失败,返回代码:0
代码(2)执行时,显示:
操作失败,返回代码:-1


...全文
78 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
Xeric2003 2004-11-22
  • 打赏
  • 举报
回复
刚才写错了,应该是:
返回代码:-1;SELECT INTO command not allowed within multi-statement transaction.
请问我该怎么处理?
Xeric2003 2004-11-22
  • 打赏
  • 举报
回复
谢谢lzp_lrp(lzp)的帮助!
刚才我用了你改的程序,但出现如下错误:
返回代码:-1;INSERT INTO command not allowed within multi-statement transaction.
请问我该怎么处理?
WorldMobile 2004-11-22
  • 打赏
  • 举报
回复
不是什么奇怪的问题,不注意时常犯的错误
WorldMobile 2004-11-22
  • 打赏
  • 举报
回复
发错了

呵呵,你这么写
代码(1)
long ret
declare myproc procedure for data_process using sqlca;
execute myproc;
ret=sqlca.sqlcode
if ret >= 0 then
messagebox("提示","操作执行成功!")
commit using sqlca;

else
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
rollback using sqlca;

end if
close myproc;

代码(2)
declare myproc procedure for data_process using sqlca;
execute myproc;
if sqlca.sqlcode >= 0 then
messagebox("提示","操作执行成功!")
commit using sqlca;

else
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
rollback using sqlca;

end if
close myproc;

因为rollback和commit 会改变sqlca里的sqlca.sqlcode里的值
所以你应该先messagebox,然后再执行rollback或commit即可
WorldMobile 2004-11-22
  • 打赏
  • 举报
回复
呵呵,你这么写
代码(1)
long ret
declare myproc procedure for data_process using sqlca;
execute myproc;
ret=sqlca.sqlcode
if ret >= 0 then
messagebox("提示","操作执行成功!")
commit using sqlca;

else
rollback using sqlca;
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
end if
close myproc;

代码(2)
declare myproc procedure for data_process using sqlca;
execute myproc;
if sqlca.sqlcode >= 0 then
commit using sqlca;
messagebox("提示","操作执行成功!")
else
rollback using sqlca;
messagebox("操作失败","返回代码:"+string(ret)+";"+sqlca.sqlerrtext)
end if
close myproc;

752

社区成员

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

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