SQL> CREATE OR REPLACE PROCEDURE vpdtest_context_procedure(object_type IN VARCHAR2)
2 IS
3 BEGIN
4 DBMS_SESSION.SET_CONTEXT('vpdtest_context', 'object_type', object_type);
5 END;
6 /
Procedure created.
SQL>
SQL> CREATE CONTEXT vpdtest_context using vpdtest_context_procedure;
Context created.
SQL>
SQL> CREATE TABLE vpdtest_table AS SELECT * FROM dba_objects;
Table created.
SQL>
SQL> BEGIN
2 DBMS_RLS.ADD_POLICY(object_name => 'vpdtest_table',
3 policy_name => 'vpdtest_policy',
4 policy_function => 'vpdtest_policy_function');
5 END;
6 /
PL/SQL procedure successfully completed.
SQL>
SQL> CREATE OR REPLACE FUNCTION vpdtest_policy_function(schema VARCHAR2,
2 tab VARCHAR2) RETURN VARCHAR2
3 IS
4 BEGIN
5 RETURN 'OBJECT_TYPE = sys_context( ''vpdtest_context'', ''object_type'' )';
6 END;
7 /
Function created.
SQL>
SQL> EXEC vpdtest_context_procedure('TABLE');
PL/SQL procedure successfully completed.
SQL> SELECT DISTINCT object_type FROM vpdtest_table;
OBJECT_TYPE
-----------------------
TABLE
SQL>
SQL> EXEC vpdtest_context_procedure('VIEW');
PL/SQL procedure successfully completed.
SQL> SELECT DISTINCT object_type FROM vpdtest_table;
OBJECT_TYPE
-----------------------
VIEW
Like this:
Like Loading...