在现实的案例中我们会遇到各种各样的案例,来查询数据。
- 创建一张表,用来存储数据
CREATE TABLE T(
organization_id NUMBER
,organization_code VARCHAR2(3)
,organization_name VARCHAR2(150)
);
-- 插入测试数据
INSERT INTO T VALUES (101,'AAA','name1');
INSERT INTO T VALUES (102,'BBB','name2');
INSERT INTO T VALUES (103,'CCC','name3');
INSERT INTO T VALUES (104,'DDD','name4');
- 创建一个founction来限制我们的数据
-- step 1: 创建查询策略函数
CREATE OR REPLACE FUNCTION f_limited_query_t(s_schema IN VARCHAR2
,s_object IN VARCHAR2) RETURN VARCHAR2 AS
BEGIN
RETURN 'organization_id not in(101)';
END;
--函数中必须拥有两个参数,不能去掉。
- 给我们的表加上策略
-- step 2: 为对象添加查询策略
BEGIN
DBMS_RLS.add_policy (object_schema => 'APPS',
object_name => 'T',
policy_name => 'POLICY_LIMITED_QUERY_T',
function_schema => 'APPS',
policy_function => 'F_LIMITED_QUERY_T'); -- 可以使 package.function
END;