Oracle 函數 “數據控制,指定某些人只能查看他權限範圍內的信息”
阿新 • • 發佈:2017-11-13
plan connect emp ora turn return tab 臨時表 div
1 create or replace function work_plan_mask (p_schema VARCHAR2,p_table VARCHAR2) 2 3 return Varchar2 AS -- 數據控制,指定某些人只能查看他權限範圍內的信息 4 5 v_predicate VARCHAR2(1000) := ‘1=2‘; 6 v_personcode Personnel.Person_Code%TYPE := SYS_CONTEXT(get_context_name,‘PERSON_CODE‘); 7 v_user_name work_plan.reporter%type := SYS_CONTEXT(get_context_name,‘APP_USER_NAME‘); -- 獲取當前賬號 8 v_number NUMBER; 9 10 cursor get_work_plan_role is 11 select count(*) 12 from application_roles 13 WHERE role_name = ‘work_plan_search‘ AND username = v_user_name; -- work_plan_search:系統裏(給了權限)的角色14 15 BEGIN 16 17 IF v_personcode in(‘00013‘,‘00016‘) THEN -- 指定這幾個人可看 18 RETURN ‘1=1‘; -- 返回 true 19 END IF; 20 21 insert into person_code_temp -- 將下面查詢出來的結果插入person_code_temp(臨時表)表中 22 SELECT p.PERSON_CODE -- 樹狀查詢 (查出當前編號以及下一級、下下一級...等 編號,比如:總經理以及所有下屬的編號) 23 FROM PERSONNEL p24 CONNECT BY p.MANAGER = PRIOR p.PERSON_CODE 25 START WITH p.PERSON_CODE = v_personcode; 26 27 open get_work_plan_role; 28 fetch get_work_plan_role into v_number; 29 close get_work_plan_role; 30 31 v_predicate := ‘reporter = ‘‘‘ || v_user_name || ‘‘‘ OR ‘ || v_number || ‘ > 0 ‘ || 32 ‘ OR INSERT_USER = ‘‘‘ || v_user_name || ‘‘‘‘ || 33 ‘ OR INSERT_USER IN ( SELECT get_username(P.PERSON_CODE) FROM person_code_temp P)‘; 34 35 RETURN v_predicate; 36 end work_plan_mask;
這個函數 SYS_CONTEXT(),可以參考 http://blog.csdn.net/rfb0204421/article/details/7861332 或 http://blog.csdn.net/kadwf123/article/details/8065673
Oracle 函數 “數據控制,指定某些人只能查看他權限範圍內的信息”