如果但就执行
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;
/
为什么会这样?

解决方案 »

  1.   

    使用直接权限赋予grant select, insert on  to user;
    或者尝试用调用者权限模式authid current user
      

  2.   

    v_sql:='insert into '||p_kimstable||' nologging ('||p_kimscol||')select '||p_ehrcol||' from '||p_ehrtable||'@linkehr';打印出来看看,是否拼接正确2 执行动态语句是否拥有访问LINK的权限?建立LINK是PUBLIC的?
      

  3.   

    存储过程中需要对调用表进行显示赋权。
    同时你的sql
    select ename from scott.bonus@linkehr;
    前面的 scott 没有必要加,因为dblink中应该有连接的用户名和密码。
      

  4.   


    我对oracle不熟,怎么做?
      

  5.   

    你这个包是建在 SCOTT.iniData  下面的,scott下面存在表 bonus 么?