Oracle PL/SQL过程中的错误 [英] Error in Oracle PL/SQL procedure
问题描述
我在
ERROR at line 1:
ORA-28110: policy function or package VPD1.COLUMN_SEC_PACKAGE has error
请帮助我.在oracle中实现列级安全性时,出现了错误.
Please help me. While implementing column level security in oracle, I got the error.
过程:
CREATE OR REPLACE package body COLUMN_SEC_PACKAGE
is
FUNCTION TEST_SEC( OWNER VARCHAR2, OBJNAME VARCHAR2)
RETURN VARCHAR2
is v_SQL VARCHAR2(2000):='1=0';
begin
IF (SYS_CONTEXT('USERENV','SESSION_USER') ='VPD1')
THEN
v_SQL:=NULL;
END IF;
RETURN V_SQL;
end;
/
要添加策略的PL/SQL
BEGIN
DBMS_RLS.ADD_POLICY (object_schema => 'VPD1',
object_name => 'employee',
policy_name => 'VPD1_POLICY_COLUMN1',
function_schema => 'VPD1',
policy_function => 'COLUMN_SEC_PACKAGE.TEST_SEC',
sec_relevant_cols => 'salary');
END;
/
推荐答案
您可以在执行语句后立即使用show errors
或使用select * from user_errors where name = 'COLUMN_SEC_PACKAGE'
来查看软件包中的错误.
You can see the error from the package using show errors
immediately after executing the statement, or with select * from user_errors where name = 'COLUMN_SEC_PACKAGE'
.
您的包裹正文缺少END
;你有一个功能,但没有包装:
Your package body is missing an END
; you have one for the function but not for the package:
CREATE OR REPLACE package body COLUMN_SEC_PACKAGE is
FUNCTION TEST_SEC( OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2 is
v_SQL VARCHAR2(2000):='1=0';
begin
IF (SYS_CONTEXT('USERENV','SESSION_USER') ='VPD1') THEN
v_SQL:=NULL;
END IF;
RETURN V_SQL;
end; -- end of function
-- no end for the package
/
在每个点上指定要结束的内容很有帮助,这样您就可以轻松找出缺少的内容;缩进当然也有帮助.您也没有在包装说明后显示/
,这可能只是复制和粘贴错误.您需要运行两个命令,并在每个命令后加上一个/
:
It's helpful to specify what you are ending at each point so you can easily pick out what is missing; indentation helps that too of course. You also haven't shown a /
after the package specification, which might just be an copy-and-paste mistake. You need to run both commands, with a /
after each:
CREATE OR REPLACE PACKAGE COLUMN_SEC_PACKAGE AS
FUNCTION TEST_SEC (OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2;
END COLUMN_SEC_PACKAGE;
/
CREATE OR REPLACE package body COLUMN_SEC_PACKAGE is
FUNCTION TEST_SEC( OWNER VARCHAR2, OBJNAME VARCHAR2) RETURN VARCHAR2 is
v_SQL VARCHAR2(2000):='1=0';
begin
IF (SYS_CONTEXT('USERENV','SESSION_USER') ='VPD1') THEN
v_SQL:=NULL;
END IF;
RETURN V_SQL;
end TEST_SEC;
END COLUMN_SEC_PACKAGE;
/
这篇关于Oracle PL/SQL过程中的错误的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!