我想从包中定义的函数内部调用SYS.DBMS_RLS.ENABLE_POLICY()。 但它显示了以下错误:在函数内调用DBMS_RLS.ENABLE_POLICY?
Error(19,16): PLS-00201: identifier 'SYS.DBMS_RLS' must be declared
代码:
CREATE OR REPLACE PACKAGE BODY foopackage IS
FUNCTION foobar RETURN t_table PIPELINED IS
BEGIN
EXECUTE(SYS.DBMS_RLS.ENABLE_POLICY(-- error in this line
object_schema => 'foo',
object_name => 'bar',
policy_name =>'bar2',
enable => FALSE
));
-- some more code
EXECUTE(SYS.DBMS_RLS.ENABLE_POLICY(-- error in this line
object_schema => 'foo',
object_name => 'bar',
policy_name =>'bar2',
enable => TRUE
));
RETURN;
END;
END foopackage;
我同意贾斯汀:以编程方式关闭RLS策略是非常糟糕的做法。如果你需要运行一些不受政策约束的代码,那么你需要有一个特殊的用户,并有适当的豁免。 – APC
创建使用应用该策略的同一个表的策略谓词时,要走的路是什么? – blaze
如何绕过功能进入策略功能? – blaze