【问题标题】:Oracle procedure synonym operating over parent schema tables对父模式表进行操作的 Oracle 过程同义词
【发布时间】:2014-09-27 00:26:27
【问题描述】:

这是我的场景:

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

架构: USER_2

所以我有两个模式,USER_2USER_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;

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

SELECT RECORD FROM MY_TABLE;

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

SELECT RECORD FROM USER_1.MY_TABLE;

已删除。

感谢您的宝贵时间!

【问题讨论】:

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


    【解决方案1】:

    要让包对调用者架构中的对象进行操作,您需要在包(又名调用者权限包)上声明 AUTHID CURRENT_USER。

    默认为 AUTHID DEFINER,允许包对来自与包本身相同架构的可用对象进行操作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-26
      • 1970-01-01
      • 1970-01-01
      • 2011-04-16
      • 2012-09-01
      • 2021-09-17
      • 2020-07-10
      • 1970-01-01
      相关资源
      最近更新 更多