存储过程访问其他用户的表的问题

  

  今天写了一个存储过程,需要通过dblink把其他用户下面的表的数据增量复制到目标表中,结果访问其他系统的表的时候,在存储过程中一直有问题,在堆栈溢出中找到了答案。   

  

  
  

  
  

  在存储过程、函数和definers-rights包、角色(这些as    <代码>   SELECT_CATALOG_ROLE      )是禁用的。因此,,   <强>   这样的PL/SQL程序只能获取元数据对象的模式      。如果你想写的PL/SQL程序获取元数据对象在一个不同的模式(基于调用者# 39;拥有   <代码>   SELECT_CATALOG_ROLE      ),您必须使程序invokers-rights。   

     

  要做到这一点,你必须add    <代码>   authid,      你的程序。   

  <前>   create  procedure  tests  authid  CURRENT_USER    l_foo 才能;clob beginselectregexp_replace (   dbms_metadata.get_ddl才能(& # 39;用户# 39;,,& # 39;斯科特# 39;,,null), | |   dbms_metadata.GET_GRANTED_DDL 才能;(& # 39;SYSTEM_GRANT& # 39;,, & # 39;斯科特# 39;),| |   dbms_metadata.GET_GRANTED_DDL 才能;(& # 39;OBJECT_GRANT& # 39;,, & # 39;斯科特# 39;),| |   dbms_metadata.GET_GRANTED_DDL 才能;(& # 39;ROLE_GRANT& # 39;,, & # 39;斯科特# 39;),& # 39;“& # 39;,| |,杆(10),& # 39;“& # 39;,| |,杆(10)),into  l_foo    得到双重;终结;/完成,EXEC  tests    PL/SQL  procedure  successfully 完成   之前   

  
  

存储过程访问其他用户的表的问题