Oracle-函数不起作用
所以我不知道我在做什么错。我已经花了几个小时了,非常感谢您的帮助。
因此,基本上我有2个表,一个表被称为主student
列表,它是一个学生列表,student_no
另一个表被调用enrol
,它基本上具有该学生所注册课程的列表。
因此,我编写了一个函数,用于将登录学生的用户名(在本例中为)与student_no
学生列表进行比较,并确保登录用户是学生。然后,它将student_no
与enrol
表进行比较,以查找用户注册的任何程序。因此,从本质上讲,当我SELECT * FROM yaser.enrol
(表所有者是yaser)时,我应该只从注册列表中看到几条记录。相反,我得到了错误:failed to execute policy function
。
这是我的职能:
-- Create policy function to be called when 'ENROL' table is accessed
create or replace function f_policy_enrol (schema in varchar2, tab in varchar2)
-- Function will return a string that is used as a WHERE clause
return varchar2
as
v_student_no varchar2(10);
is_student number:=0;
v_user varchar2(100);
out_string varchar2(400) default '1=2 ';
begin
-- get session user
v_user := lower(sys_context('userenv','session_user'));
-- Is the user a student?
begin
select student_no into v_student_no from student where lower(student_no) = v_user;
is_student:=1;
exception
when no_data_found then
v_student_no := 0;
end;
-- If it's a student, then they are only allowed to see their record only.
if is_student = 1 then
out_string := out_string||'or student_no = '||v_student_no||' ';
end if;
return out_string;
end;
/
这是我引用的政策:
begin
dbms_rls.add_policy('yaser',
'enrol',
'accesscontrol_enrol',
'yaser',
'f_policy_enrol',
policy_type => dbms_rls.context_sensitive);
end;
/
如前所述..我不确定我要去哪里错了。无论是在策略还是功能上。任何帮助将不胜感激!如果您有任何疑问,只要有空闲时间,我就会很乐意回答!
提前致谢!
亚瑟
student_no
列的数据类型是什么?列名暗示它是一个NUMBER
。但是,您正在调用lower
它并将其与会话用户进行比较的事实意味着它是一个VARCHAR2
。
假设student_no
为VARCHAR2
,则一个问题是您的谓词缺少该值周围的单引号。如果v_student_no
是,例如“
jcave”,则您out_string
将
1=2 or student_no = jcave
由于未引用“
jcave”,因此Oracle假定它必须是标识符,因此它将在名为的表中查找列jcave
。没有找到这样的列,它将引发错误。如果在字符串两边加上单引号,则会更有运气
out_string := out_string||'or student_no = '''||v_student_no||''' ';
可能还会有其他错误。您是否尝试过手动调用该函数以查看其返回的确切信息?如果您在session_user
设置为“
jcave”时手动调用了该函数,那么您应该已经看到缺少单引号的结果。如果您复制并粘贴返回值并将其添加到SELECT
语句的末尾,则会立即看到错误。v$vpd_policy
如果要避免手动调用该函数,还可以查询以查看已添加到特定SQL语句中的特定策略谓词-
当您尝试调试会话状态为VPD的VPD问题时,这非常有用。您不容易复制。
我试图从oracle中的XML列中提取值。我的问题如下: 但是,我的SQL Developer中出现以下错误: ORA-00932:不一致的数据类型:预期-得到- 00932. 00000-"不一致的数据类型:预期%s得到%s" 附加信息: 我试图查询的columnn类型是:VARCHAR2(2000字节) 该列中的XML内容非常简单,下面是一个片段:
问题内容: 嗨,我尝试在POST请求中尝试PHPPost请求,认为这可能对我有用,下面给出了我的代码 形成index.php文件,而index2.php是同一目录中的另一个文件,当我打开页面时,我的error.log文件中出现以下错误 我想要做的是我有一个发送发帖请求的预订表格,然后我想处理发帖值并再次将发帖请求发送到贝宝 问题答案: 您需要为php安装CURL支持。 在Ubuntu中,您可以通过
问题内容: 我的html像这样 jQuery代码如下 当我单击Submit按钮时,我的ajax请求无法正常工作,看起来好像控件正在传递给JQuery Submit函数,但是ajax请求没有正确执行/正常工作,这是怎么回事? 问题答案: 将事件处理函数放入$(document).ready(function(){…})中。它现在应该工作 还添加preventDefault()以限制页面刷新
我试图弹出的对话窗口在Netbean 8.0.2 Primeface如图所示http://www.primefaces.org/showcase/ui/overlay/dialog/basic.xhtml 我在我的项目中添加了primefaces-5.3.jar,但是当我键入PF时,例如: 什么也没有发生,它向我显示了一些错误:全局变量“PF”没有声明。 请帮帮我。
问题内容: 以下代码从文件加载html内容我使用了该线程 请让我知道问题是什么?我希望这是愚蠢的:) 编辑:正确的代码 谢谢乔恩和大家! 问题答案: callback()函数在响应到达时运行,并且不在方法范围内运行,因为该函数已经结束。 您可以在调用中使用属性来设置回调函数的上下文:
我正在使用Jasper和JasperSoft Studio创建报告。这是一个maven sping引导应用程序。报告工作良好。数据连接也正常工作。 我只对内置函数(如sum()、trim()、replace()…)有问题。我也不能编写自定义函数。当我调用其中一个函数时,生成报告时出现错误。以下消息: 在Jaspersoft studio中一切正常,错误只在我生成报告时出现。 在Jaspersoft