我最近急需VPD方案,我按照资料上的做法做好了,当在我SELECT的时候,老报不能执行策略函数。我查看了一下我的日志文件,错误如下:
Policy function execution error:
Logon user : SEC
Table/View : SBDBA.TP_GRJCDA
Policy name : USER_SECTIRY_POLICY
Policy function: SEC.USER_SECTIRY_POLICY.GETUSERID
ORA-06550: 第 1 行, 第 59 列:
PLS-00306: 调用 'GETUSERID' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 54 列:
PL/SQL: Statement ignored可是我的策略函数根本就没有参数啊。
我的USER_SECTIRY_POLICY代码如下:
create or replace package user_sectiry_policy is
function getuserid return varchar2;
end;create or replace package body user_sectiry_policy is
function getuserid return varchar2
is
begin
if sys_context('userenv','session_user') in ('SYS','SEC','SYSTEM') THEN
RETURN '';
ELSE
RETURN 'ZHXGR='''||SYS_CONTEXT('USER_CONTEXT','USERID')||'''';
END if;
end;
end;最后我调用了dbms_rls.add_policy函数来分配我的策略函数我用SQL语句直接调用该策略函数执行没有任何问题。敬请各位大哥指点!小子不胜感激!!
Policy function execution error:
Logon user : SEC
Table/View : SBDBA.TP_GRJCDA
Policy name : USER_SECTIRY_POLICY
Policy function: SEC.USER_SECTIRY_POLICY.GETUSERID
ORA-06550: 第 1 行, 第 59 列:
PLS-00306: 调用 'GETUSERID' 时参数个数或类型错误
ORA-06550: 第 1 行, 第 54 列:
PL/SQL: Statement ignored可是我的策略函数根本就没有参数啊。
我的USER_SECTIRY_POLICY代码如下:
create or replace package user_sectiry_policy is
function getuserid return varchar2;
end;create or replace package body user_sectiry_policy is
function getuserid return varchar2
is
begin
if sys_context('userenv','session_user') in ('SYS','SEC','SYSTEM') THEN
RETURN '';
ELSE
RETURN 'ZHXGR='''||SYS_CONTEXT('USER_CONTEXT','USERID')||'''';
END if;
end;
end;最后我调用了dbms_rls.add_policy函数来分配我的策略函数我用SQL语句直接调用该策略函数执行没有任何问题。敬请各位大哥指点!小子不胜感激!!
function getuserid() return varchar2;
end;