Oracle PL/SQL过程中的错误 [英] Error in Oracle PL/SQL procedure

查看:108
本文介绍了Oracle PL/SQL过程中的错误的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我在

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆