今天写了一个存储过程,需要通过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 完成 >之前
存储过程访问其他用户的表的问题