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
答案 0 :(得分:0)
为了使角色适用于存储过程,您可能需要查看oracle documentation中的authid current_user
。同样有用:http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/subprograms.htm#LNPLS682