PL/SQL函数逻辑
所以最近我开始用数据库做实验,我还是个新手,虽然我得到了一些关于函数的例子,但我似乎不知道我的逻辑出了什么问题 因此,我有一个名为“tutorial”的表,我试图将表中的一行与登录用户进行匹配。我确信我已经将登录用户设置为v_user正确..所以我认为这只是下面代码中的逻辑PL/SQL函数逻辑,sql,oracle,function,plsql,Sql,Oracle,Function,Plsql,所以最近我开始用数据库做实验,我还是个新手,虽然我得到了一些关于函数的例子,但我似乎不知道我的逻辑出了什么问题 因此,我有一个名为“tutorial”的表,我试图将表中的一行与登录用户进行匹配。我确信我已经将登录用户设置为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)
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”下的示例中有效,而在名为“dummy”的给定sys角色用户中无效
begin
dbms_rls.add_policy('oe',
'enrol',
'accesscontrol_enrol',
'sys',
'f_policy_enrol',
policy_type => dbms_rls.context_sensitive);
end;
/
我应该将“oe”更改为“虚拟”还是“系统”?我希望此策略为之工作的表名为enrol,它是我通过虚拟用户创建的表。再次感谢 我们不能在
IF
语句中指定SQL
,因此让我们先查询,然后在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
哦,这就解释了为什么我找不到关于它的任何信息。所以我们不能在IF语句中使用SQL查询。谢谢堆:)!我会试试看它是否有效。谢谢。它似乎起作用了!:)@OracleUser如果我有任何后续问题,我可以问你吗?我想测试一下这个功能,看看它是否正常工作。到目前为止,函数的创建没有错误。给出的调用策略的示例是通过dbms_dls.add_policy命令完成的,但是当我尝试它时,我得到一个“表或视图不存在”错误。我将编辑带有策略的主要帖子,以便您可以看到我的错误之处。:)我已经更新了最初的帖子。任何帮助……好吧,你会是一个救生员的!:)您需要??dbms.add\u policy的第一个参数是表的所有者,因此如果表的所有者是enrol
,您应该输入'dummy'
。