Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PL/SQL函数逻辑_Sql_Oracle_Function_Plsql - Fatal编程技术网

PL/SQL函数逻辑

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)

所以最近我开始用数据库做实验,我还是个新手,虽然我得到了一些关于函数的例子,但我似乎不知道我的逻辑出了什么问题

因此,我有一个名为“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) 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'