【问题标题】:PL/SQL Function LogicPL/SQL 函数逻辑
【发布时间】:2014-02-18 15:24:32
【问题描述】:

所以最近我开始尝试使用数据库,但我还是新手,虽然我得到了几个与 函数 相关的示例..我似乎无法弄清楚有什么问题我的逻辑。

所以我有一个名为“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;

当然这不是全部功能:)

任何帮助或建议将不胜感激! :)

** 编辑 **

这是 policy 在给我的示例中使用 oe 拥有的表在创建的用户 'sec_admin' 下工作,而在我给定的 sys 角色中不起作用名为“虚拟”的用户。

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

我应该将“oe”改为“dummy”还是“sys”?我希望此策略适用的表称为 enrol,它是 我通过我的 dummy 用户创建的 表。再次感谢!

【问题讨论】:

  • dbms_rls.add_policy 的第一个参数是表的所有者,所以是的,如果那是表的所有者 enrol,则应该输入 'dummy'。

标签: sql oracle function plsql


【解决方案1】:

我们不能在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_RLS.DROP_POLICY ??
猜你喜欢
  • 1970-01-01
  • 2011-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-08
  • 1970-01-01
  • 2016-05-27
相关资源
最近更新 更多