我在数据库A中为数据库B建立了一个database link: test ,  在plsql中
insert into tmenu(select * from tmenu@test);
这句单独执行是可以执行的。但是下面的就执行不成功了。 begin
      delete from tmenu;
      insert into tmenu(select * from tmenu@test);
      commit;
    exception
      when others then
        rollback;
        raise;
    end;错误信息是:PL/SQL: ORA-00942: 表或视图不存在
ORA-06550: 第 2 行, 第 29 列: 
PL/SQL: SQL Statement ignored应该是tmenu@test这个字符串识别不了,不知道为什么。大家有没有碰到过,给小弟指点一下.........

解决方案 »

  1.   

    存储过程需要单独授权,你当前用户对tmenu@test的访问权,应该来自角色里的权限,默认在过程中失效。解决办法有二:
    1  grant select on tmenu to username;   --注意,这里的username是你db link登录远程数据库的用户。2  存储过程/函数中加上Authid Current_User,使得用户可以在存储过程中使用其role权限。
      

  2.   

    我同一个用户单独执行insert into tmenu(select * from tmenu@test);没有问题,应该不是权限的问题。
      

  3.   

    先用DBA权限查看你DBLINK的名称对的?
    select owner,object_name from dba_objects where object_type='DATABASE LINK'
      

  4.   

    declare
       v_n number(10);
    begin   
       select count(*) into v_n from tmenu@test; 
       dbms_output.put_line(v_n);
    end; 这样报错吗?
      

  5.   


    这个报错 ,单独一句select * from tmenu@test是可以的。
      

  6.   

    procedure的权限和用户的权限不完全相同的,即使这个prcedure是你建的另外,dblink过来的objects在过程中这样写可能会有问题,通常我们的解决办法是建一个synonym
      

  7.   

    ls的几位说下是赋dblink 的权限吗
      

  8.   

    授予你以该dblink中登录远程数据库的用户访问该表的权限。比如你当前登录的是A库,当前使用用户为u1。
    那么你建立该dblink时,是不是要你提供一个登录用户名及密码?这里的用户名肯定在你远程数据库B里已经存在,假设它为u2。你现在要做的是,登录B库,grant select on tmenu to u2;
    当然,你得有这个权限,比如是B库的SYSDBA,DBA,或者B库中tmenu表的拥有者。
      

  9.   

    在dblink的那个table前面加上schema.declare 
      v_n number(10); 
    begin  
      select count(*) into v_n from username.tmenu@test; 
      dbms_output.put_line(v_n); 
    end; 
      

  10.   

    创建同义词语句:
    create public synonym remote_tmenu for tmenu@test;begin 
          delete from tmenu; 
          insert into tmenu(select * from remote_tmenu); 
          commit; 
        exception 
          when others then 
            rollback; 
            raise; 
    end; 
      

  11.   


    加上后可以。谢谢。 再问下能不能通过赋权来实现呢?14lou的加同义词的方式不行,同义词转换不了,应该是同样的问题。