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 資料表...