我必须应用 VPD 并且我创建了一个函数。我从学生表中取出了 student_no,根据该 student_no,vpd 将显示来自登记表的学生信息。但是每次我从 oe.enrol 中选择 * 时,它都会说没有选择行。如果我不应用 vpd,它会显示所有输出,因此授权正在运行,但仅应用此功能时表示未选择任何行。请任何人提出任何建议。
connect sec_admin/welcome1;
CREATE or REPLACE function f_policy_enrol
(schema in varchar2, tab in varchar2)
return varchar2
as
v_student_no number:=0;
is_student number:=0;
v_user varchar2(100);
out_string varchar2(400) default '1=2';
begin
v_user := sys_context('userenv','session_user');
begin
SELECT e.student_no into v_student_no from oe.STUDENT e where e.student_no = v_user;
is_student:=1;
exception
when no_data_found then
v_student_no := 0;
end;
if is_student=1 then
out_string := out_string||'or student_no='||v_student_no||'';
end if;
return out_string;
end;
/