PL / SQL函数逻辑

时间:2014-02-18 15:24:33

标签: sql oracle function plsql

所以最近我开始尝试数据库,我还是新手,虽然我有几个例子与功能有关...我似乎无法弄清楚出了什么问题。我的逻辑。

所以我有一个名为“教程”的表格,我正在尝试将表格中的一行与登录用户匹配。我确定我已将登录用户设置为 v_user ,所以我认为这只是以下代码中的逻辑。

if v_emp_no != 0 and (select tutor_emp_no into v_tutor_emp_no from tutorial where
lower(tutor_emp_no) = v_user) then

 -- Employee is a Tutor
 is_tutor := 1;
end if;

当然这不是完整的功能:)

非常感谢任何帮助或建议! :)

**编辑**

这是策略,它适用于使用oe拥有的表在创建的用户'sec_admin'下给我的示例,但在我的给定 sys 角色中不起作用用户名为'dummy'。

begin
dbms_rls.add_policy('oe',
                    'enrol',
                    'accesscontrol_enrol',
                    'sys',
                    'f_policy_enrol',
                    policy_type => dbms_rls.context_sensitive);
end;
/

我应该将“ oe ”更改为“虚拟”还是“ sys ”?我希望此政策适用的表格称为注册,它是通过我的虚拟用户我创建的表格。再次感谢!

1 个答案:

答案 0 :(得分:1)

我们无法在SQL语句中指定IF,因此我们首先查询,然后检查IF

中的结果
select MAX(tutor_emp_no) into v_tutor_emp_no from tutorial where
lower(tutor_emp_no) = v_user;

if v_emp_no != 0 and v_tutor_emp_no is NOT NULL then

 -- Employee is a Tutor
 is_tutor := 1;
end if;

如果找不到记录,MAX()只是返回NULL