使用来自另一个模式的表创建存储过程会抛出PLS-00201

时间:2013-06-05 20:24:49

标签: oracle stored-procedures plsql

Oracle 10g。我是程序的新手,所以也许我错过了一些明显的东西。

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

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

当我尝试按如下方式创建一个简单的过程时,它会抛出PLS-00201标识符'T2001_WRITEOFF'必须声明,并指向第二行。无论我是否使用角色授予,此错误都是相同的。

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;
/

提前感谢您的帮助

JimR

1 个答案:

答案 0 :(得分:0)

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