通过DBlink调用存储过程的奇怪问题

iguiyi 2009-12-29 04:38:53
小弟在编写存储过程的时候碰到一个奇怪的问题,在本地数据库A通过dblink调用远程数据库B上的存储过程C时,发现返回结果是存储过程C异常的结果‘O’,而如果直接登陆到远程数据库B上执行存储过程C,则返回正确的结果‘Y’,想请教一下,这种现象是由什么引起的?

本地数据库A上的存储过程如下:
CREATE OR REPLACE PROCEDURE GETONECJNUMTEST(flag out varchar2)
AS
LS_MONTH varchar2(100);
LS_MONTH1 varchar2(100);
LS_MONTH2 varchar2(100);
LS_MONTH3 varchar2(100);
LS_MONTH4 varchar2(100);
tel_no varchar2(100);

BEGIN
TEL_NO:= '85818071';

GETPAYCASH2_731@to_jzjf(TEL_NO,LS_MONTH1,LS_MONTH2,LS_MONTH3,LS_MONTH4);

flag:=LS_MONTH4;

EXCEPTION WHEN OTHERS THEN
FLAG := 'N'||SQLERRM;
ROLLBACK;
END;

存储过程C如下:
create or replace procedure acct.GetPayCash2_731(
in_telno in varchar2,
total_value out varchar2,
punish_value out varchar2,
balance_value out varchar2,
out_flag out varchar2) is

.......

begin
.......
EXCEPTION WHEN OTHERS THEN
sqlerr:=substr(sqlerrm,1,100);
dbms_output.put_line(sqlerr);
total_value:=0;
punish_value:=0;
balance_value:=0;
out_flag :='O';
end GetPayCash2_731;

已经查了一天了,还没查出所以然来,先谢谢各位大大了!
...全文
416 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
crazylaa 2009-12-29
  • 打赏
  • 举报
回复
GETPAYCASH2_731@to_jzjf(TEL_NO,LS_MONTH1,LS_MONTH2,LS_MONTH3,LS_MONTH4);
改成
acct.GETPAYCASH2_731@to_jzjf(TEL_NO,LS_MONTH1,LS_MONTH2,LS_MONTH3,LS_MONTH4);
???
是否需要acct的权限啊???
lumeixin9 2009-12-29
  • 打赏
  • 举报
回复
先检查 dblink 是否建通了~~
lumeixin9 2009-12-29
  • 打赏
  • 举报
回复
我觉得在调用时候出问题:
acct.GetPayCash2_731@to_jzjf(TEL_NO,LS_MONTH1,LS_MONTH2,LS_MONTH3,LS_MONTH4);
iguiyi 2009-12-29
  • 打赏
  • 举报
回复
我建dblink的用户和直接登陆数据库B的用户都是同一个啊,应该怎么检查呢?
shiyiwan 2009-12-29
  • 打赏
  • 举报
回复
检查权限

2,668

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 认证与考试
社区管理员
  • 认证与考试社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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