dblink 跨数据库报错
如果但就执行
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;
/
为什么会这样?
------解决方案--------------------使用直接权限赋予grant select, insert on 。。。 to user;
或者尝试用调用者权限模式authid current user
------解决方案--------------------v_sql:='insert into '||p_kimstable||' nologging ('||p_kimscol||')select '||p_ehrcol||' from '||p_ehrtable||'@linkehr';
打印出来看看,是否拼接正确
2 执行动态语句是否拥有访问LINK的权限?建立LINK是PUBLIC的?
------解决方案--------------------存储过程中需要对调用表进行显示赋权。
同时你的sql
select ename from scott.bonus@linkehr;
前面的 scott 没有必要加,因为dblink中应该有连接的用户名和密码。