在父模式表上运行的Oracle过程同义词

时间:2014-09-27 00:26:28

标签: oracle plsql database-schema database-administration synonym

以下是我的情景:

架构: USER_1 打包: PKG_1 程序: PROC_1 表: MY_TABLE

架构: USER_2

所以我有两个架构, USER_2 几乎与 USER_1 中的每个表都有同义词,它还有 PKG_1.PROC_1的同义词 ,更新 MY_TABLE 。但是,对 PKG_1.PROC_1 使用 USER_2 同义词时, USER_1 而非 USER_2 的过程更新表...

我如何操作来自执行另一个模式中过程同义词的相同模式的表?

基本上,我期望实际看到 USER_2.MY_TABLE 的更改,但没有在那里进行任何更改......

我是通过 USER_2

完成的
CREATE OR REPLACE SYNONYM MY_TABLE FOR USER_1.MY_TABLE;

CREATE OR REPLACE SYNONYM PKG_1 FOR USER_1.PKG_1;
EXECUTE PKG_1;

我没有任何错误,甚至在连接到 USER_2 时,DBMS_OUTPUT.PUT_LINE日志也可见且正确。但是,如果我这样做,请 PKG_1.PROC_1 删除 MY_TABLE 中的记录:

SELECT RECORD FROM MY_TABLE;

使用USER_2,我可以看到记录未被删除,但是:

SELECT RECORD FROM USER_1.MY_TABLE;

已删除。

感谢您的时间!

1 个答案:

答案 0 :(得分:0)

要让包对调用者的模式中的对象进行操作,您需要在包(也就是调用者权限包)上声明AUTHID CURRENT_USER。

默认值为AUTHID DEFINER,允许包对与包本身相同的模式提供的对象进行操作。