【问题标题】:Create stored procedure with table from another schema throws PLS-00201使用来自另一个模式的表创建存储过程会引发 PLS-00201
【发布时间】:2013-06-05 20:24:49
【问题描述】:

甲骨文 10g。我是程序新手,所以我可能遗漏了一些明显的东西。

架构所有者 ABC 有表 T2001_WRITEOFF。首先,我已将 SIUD 授予 some_update_role,并将该角色授予开发人员用户 IJK。用户 IJK 然后为 ABC.T2001_WRITEOFF 创建了同义词 T2001_WRITEOFF;这适用于普通的 SQL DML 命令。

但是,我在这里的其他地方读到,通过角色授予的权限在存储过程中不起作用。我从 IJK 中删除了同义词;然后从 ABC 直接将 SIUD 授予 IJK。在 IJK 中,正常的 SQL DML 可以工作。

当我尝试如下创建一个简单的过程时,它抛出 PLS-00201 identifier 'T2001_WRITEOFF' must be declared,并指向第二行。无论我是否使用角色授权,这个错误都是一样的。

create or replace procedure woof1(
    fooname in T2001_WRITEOFF.territory%TYPE,  <=== error points here
    bardesc IN T2001_WRITEOFF.ind_batch_submit%TYPE) IS
BEGIN
    INSERT into T2001_WRITEOFF
    VALUES ( fooname, bardesc);
END woof1;
/

提前感谢您的帮助

吉姆R

【问题讨论】:

  • 如果您删除了同义词T2001_WRITEOFF.territory%TYPE 将不起作用。请改用ABC.T2001_WRITEOFF.territory%TYPE
  • 不,抱歉,结果相同。

标签: oracle stored-procedures plsql


【解决方案1】:

为了使角色权限适用于存储过程,您可能需要查看oracle documentation 中的authid current_user。也很有帮助:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/subprograms.htm#LNPLS682

【讨论】:

  • 不,抱歉,尝试了 authid current_user 和 authid definer,但都产生了同样的错误。
猜你喜欢
  • 1970-01-01
  • 2015-08-02
  • 1970-01-01
  • 1970-01-01
  • 2015-05-26
  • 1970-01-01
  • 1970-01-01
  • 2017-06-04
  • 1970-01-01
相关资源
最近更新 更多