我正在尝试实施vpd。到目前为止,我已经创建了一个函数:
> CREATE OR REPLACE FUNCTION sales_select(
schema_var IN VARCHAR2,
table_var IN VARCHAR2
)
RETURN VARCHAR2
IS
return_val VARCHAR2(400);
BEGIN
return_val := 'time_id >= "01-JAN-01"';
RETURN return_val;
END sales_select;
/
我制定的政策如下:
L> BEGIN
2 DBMS_RLS.ADD_POLICY (
3 object_schema => 'sh',
4 object_name => 'costs1',
5 policy_name => 'costs_policy',
6 function_schema => 'policy_admin',
7 policy_function => 'sales_select',
8 statement_types => 'select'
9 );
0 END;
1 /
当我运行以下查询时:
select * from sh.costs1;
我收到以下错误:
ERROR at line 1:
ORA-28113: policy predicate has error
我认为它与函数中的引号有关,但是当我尝试更改它们时,我会遇到编译错误。
答案 0 :(得分:1)
time_id
是日期列吗?如果是这样,请尝试将第9行更改为:
return_val := 'time_id >= date ''2001-01-01''';
请注意双引号。