虚拟专用数据库策略谓词有错误

时间:2014-03-30 17:22:50

标签: sql oracle oracle11g predicate policy

我正在尝试实施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

我认为它与函数中的引号有关,但是当我尝试更改它们时,我会遇到编译错误。

1 个答案:

答案 0 :(得分:1)

time_id是日期列吗?如果是这样,请尝试将第9行更改为:

return_val := 'time_id >= date ''2001-01-01''';

请注意双引号。