oracle策略POLICY學習

2022-04-09 09:58:17 字數 2049 閱讀 8940

oracle策略policy學習

01-- 1、建立測試表

02create table test_policy03(

04 username varchar2(10),

05 password number(10)

06);

07insert into t_policy values('a',30);

08insert into t_policy values('b',20);

09insert into t_policy values('c',40);

10commit;

11--2、建立策略約束函式,表只可輸入密碼為40的使用者,其他使用者將被刪除

12create or replace function fn_getpolicy(p_schema in varchar2,

13 p_object in varchar2)

14 return varchar2 is

15 l_predicate varchar2(1000) := '';

16begin

17 l_predicate := 'password=40';

18 return l_predicate;

19end fn_getpolicy;

20--3、建立策略

21declare

22begin

23 dbms_rls.add_policy(object_schema => 'scott', --資料表(或檢視)所在的schema名稱

24 object_name => 'test_policy', --資料表(或檢視)的名稱

25 policy_name => 't_testpolicy', --policy的名稱,主要用於將來對policy的管理

26 function_schema => 'scott', --返回where子句的函式所在schema名稱

27 policy_function => 'fn_getpolicy', --返回where子句的函式名稱

28 statement_types => 'select,insert,update,delete', --要使用該policy的dml型別,如'select,insert,update,delete'

29 update_check => true, --僅適用於statement_type為'insert,update',值為'true'或'false'

30 enable => true --是否啟用,值為'true'或'false'

31 );

32end;

33--注:如果update_check設為'true',則使用者插入的值不符合policy_function返回條件時,該dml執行返回錯誤資訊。

34--現在就可以工作了: select * from t_policy; 看看結果怎樣, 是不是少了password<>40的資料了.

35--4、檢視當前使用者的策略

36select * from user_policies;

37--5、刪除策略

38declare

39begin

40 dbms_rls.drop_policy('scott', --要刪除的policy所在的schema

41 'test_policy', --要刪除policy的資料表(或檢視)名稱

42 't_testpolicy' --要刪除的policy名稱

43 );

44end;

C 泛型程式設計 基於策略 Policy 的類設計

基於策略 policy 的類設計是將templates和多重繼承組合起來,這樣可以產生程式庫中的 設計元素 policies由templates和多重繼承組成。乙個class如果使用了policies,就稱其為host class,那是乙個擁有多個template引數的class template,...

Oracle 優化策略

1.普通表轉分割槽表 大表 2g,多於1000萬條記錄 2.索引 減少非索引掃瞄 建立索引在約束條件列,選擇性高列,被驅動表 內錶 連線列 驅動表的連線列不一定 結果集在總行數的2 4 應建索引 編號,日期,外來鍵 函式索引 query rewrite integrity trusted,query...

Oracle策略相關

oracle策略可以限制查詢 修改 刪除 新增等操作,剛接觸,對查詢做乙個測試 參照 用法如下 begin call the procedure sys.dbms rls.add policy object schema 資料表 或檢視 所在的schema名稱 使用者,object name 資料表...