我有一个PL / SQL包,不指定AUTHID
(实际上是AUTHID DEFINER
)。但是,此程序包中只有一个程序需要以AUTHID CURRENT_USER
运行。这是可能的,还是我必须创建一个单独的顶级程序?
答案 0 :(得分:4)
非常确定需要一个新的包,因为AUTHID只能在PACKAGE级别指定(据我所知)
答案 1 :(得分:2)
虽然这个链接的问题稍微偏离主题,但JulesLt提供的答案解释说,您不能在包级别以下的级别指定AUTHID:
答案 2 :(得分:0)
Oracle不允许在包或类型的子程序中使用authid子句。您将收到以下错误:
Error: PLS-00157: AUTHID only allowed on schema-level programs
答案 3 :(得分:0)
可能的解决方案可能如下:
AUTHID CURRENT_USER
选项创建包; 以下是一个例子:
CREATE PACKAGE pkg1 AUTHID CURRENT_USER
IS
procedure insert_current_user;
procedure insert_definer;
END pkg1;
/
CREATE OR REPLACE PACKAGE BODY pkg1
IS
procedure insert_current_user
is
begin
insert into table1 values(1);
end insert_current_user;
procedure insert_definer
is
begin
insert into DEFINER.table1 values(1);
end insert_definer;
END pkg1;
/
DEFINER 是该表的所有者。
作为改进,您可以为DEFINER.table1
表创建同义词,然后使用包中的同义词。