dblink 跨数据库报错

ice9ying 2011-11-04 12:43:45
如果但就执行
insert into bonus nologging (ename) select ename from scott.bonus@linkehr;
commit
是没错的

但是我放到存储过程中,拼接语句执行时会报错
ORA-00942: 表或视图不存在
ORA-02063: 紧接着 line (起自 LINKEHR)


这是存储过程
CREATE OR REPLACE package body SCOTT.iniData
is
procedure iniEhr(
p_ehrtable in varchar2,
p_ehrcol in varchar2,
p_kimstable in varchar2,
p_kimscol in varchar2
)
is
v_sql varchar2(2000):='';
begin
v_sql:='insert into '||p_kimstable||' nologging ('||p_kimscol||')select '||p_ehrcol||' from '||p_ehrtable||'@linkehr';

EXECUTE IMMEDIATE v_sql;
commit;

end;

end iniData;
/


为什么会这样?
...全文
161 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
iqlife 2011-11-04
  • 打赏
  • 举报
回复
v_sql:='insert into '||p_kimstable||' nologging ('||p_kimscol||')select '||p_ehrcol||' from '||p_ehrtable||'@linkehr';

打印出来看看,是否拼接正确

2 执行动态语句是否拥有访问LINK的权限?建立LINK是PUBLIC的?
bsh_ly 2011-11-04
  • 打赏
  • 举报
回复
使用直接权限赋予grant select, insert on 。。。 to user;
或者尝试用调用者权限模式authid current user
BenChiM888 2011-11-04
  • 打赏
  • 举报
回复
你这个包是建在 SCOTT.iniData 下面的,scott下面存在表 bonus 么?


[Quote=引用 4 楼 ice9ying 的回复:]
引用 3 楼 benchim888 的回复:
存储过程中需要对调用表进行显示赋权。


我对oracle不熟,怎么做?
[/Quote]
ice9ying 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 yejihui9527 的回复:]
引用 3 楼 benchim888 的回复:
存储过程中需要对调用表进行显示赋权。

正解
[/Quote]

HOW??????
yejihui9527 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benchim888 的回复:]
存储过程中需要对调用表进行显示赋权。
同时你的sql
select ename from scott.bonus@linkehr;
前面的 scott 没有必要加,因为dblink中应该有连接的用户名和密码。
[/Quote]
正解
ice9ying 2011-11-04
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 benchim888 的回复:]
存储过程中需要对调用表进行显示赋权。
[/Quote]

我对oracle不熟,怎么做?
BenChiM888 2011-11-04
  • 打赏
  • 举报
回复
存储过程中需要对调用表进行显示赋权。
同时你的sql
select ename from scott.bonus@linkehr;
前面的 scott 没有必要加,因为dblink中应该有连接的用户名和密码。

17,377

社区成员

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

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