一段Oracle EBS中給指定使用者增加指定職責的PLSQL指令碼

來源:互聯網
上載者:User

在一些比較注重許可權的EBS項目中, 普通使用者通常沒有System Administrator許可權, 只能由DBA給一個一個使用者一個一個職責加, 純手工的話很麻煩, 於是寫了一段PLSQL指令碼, 留著備用. 由於Oracle 10g尚不支援continue語句, 因此10g和11g分開寫了.

1. Based on EBS R12.0.6/Oracle DB 10gR2

DECLARE 
  -- script to add user responsibility for R12.0/10gR2 
 
  TYPE tab_user_list IS TABLE OF VARCHAR2 (100); 
  TYPE arr_resp_list IS VARRAY (100) OF VARCHAR2 (100); 
 
  -- user to be changed 
  l_tab_user_list tab_user_list 
                    := tab_user_list ('LIAO' 
                                      ,'KARL' 
                                      ,'xx'); 
 
  -- responsibility to be added 
  l_arr_resp_list arr_resp_list 
                    := arr_resp_list ('system Administrator' 
                                      ,'Purchasing Super User' 
                                      ,'Application Administrator'); 
 
  CURSOR cur_user ( 
      pc_username IN VARCHAR2) 
  IS 
      SELECT fu.user_id 
            ,fu.user_name 
      FROM  fnd_user fu 
      WHERE  fu.user_name = pc_username 
            AND TRUNC (SYSDATE) BETWEEN TRUNC (NVL (fu.start_date, SYSDATE)) 
                                    AND TRUNC (NVL (fu.end_date, SYSDATE)); 
  TYPE tab_user IS TABLE OF cur_user%ROWTYPE; 
  l_tab_user    tab_user; 
 
  CURSOR cur_resp ( 
      pc_resp IN VARCHAR2) 
  IS 
      SELECT fa.application_id 
            ,fa.application_short_name 
            ,fr.responsibility_id 
            ,fr.responsibility_name 
            ,fr.responsibility_key 
            ,fsg.security_group_key 
      FROM  fnd_application fa 
            ,fnd_responsibility_vl fr 
            ,fnd_security_groups fsg 
      WHERE      LOWER (fr.responsibility_name) = LOWER (pc_resp) 
            AND fa.application_id = fr.application_id 
            AND fr.data_group_id = fsg.security_group_id; 
  TYPE tab_resp IS TABLE OF cur_resp%ROWTYPE; 
  l_tab_resp    tab_resp; 
 
  expt_no_user  EXCEPTION; 
  expt_no_resp  EXCEPTION; 
  l_expt_msg    VARCHAR2 (2000); 
BEGIN 
  --l_tab_user_list := tab_user_list (); 
  IF (l_tab_user_list.COUNT = 0) 
  THEN 
      l_expt_msg  := 'no user to change'; 
      RAISE expt_no_user; 
  END IF; 
 
  --l_arr_resp_list    := arr_resp_list (); 
  IF (l_arr_resp_list.COUNT = 0) 
  THEN 
      l_expt_msg  := 'no resp to add'; 
      RAISE expt_no_resp; 
  END IF; 
 
  -- loop user 
  <<loop_tab_user_list>> 
  FOR idx_tab_user_list IN l_tab_user_list.FIRST .. l_tab_user_list.LAST 
  LOOP 
      DBMS_OUTPUT.put_line ( 
            '>>> ' 
        || idx_tab_user_list 
        || ' , working for user (' 
        || l_tab_user_list (idx_tab_user_list) 
        || ') <<< '); 
 
      -- check if user exist or active 
      OPEN cur_user (l_tab_user_list (idx_tab_user_list)); 
      FETCH cur_user 
      BULK  COLLECT INTO l_tab_user; 
      CLOSE cur_user; 
      IF (l_tab_user.COUNT = 0) 
      THEN 
        DBMS_OUTPUT.put_line ( 
              'user (' 
            || l_tab_user_list (idx_tab_user_list) 
            || ') is not exist or disabled'); 
        --CONTINUE loop_tab_user_list; 
        goto  goto_tab_user_list; 
      END IF; 
 
    -- loop responsibility 
    <<loop_arr_resp_list>> 
      FOR idx_arr_resp_list IN l_arr_resp_list.FIRST .. l_arr_resp_list.LAST 
      LOOP 
        -- check if responsibility active 
        OPEN cur_resp (l_arr_resp_list (idx_arr_resp_list)); 
        FETCH cur_resp 
        BULK  COLLECT INTO l_tab_resp; 
        CLOSE cur_resp; 
        IF (l_tab_resp.COUNT = 0) 
        THEN 
            DBMS_OUTPUT.put_line ( 
                  'resp (' 
              || l_arr_resp_list (idx_arr_resp_list) 
              || ') is not exist or disabled'); 
            --CONTINUE loop_arr_resp_list; 
            goto  goto_arr_resp_list; 
        END IF; 
 
        -- add resp for user 
        DBMS_OUTPUT.put_line ( 
              'Adding resp (' 
            || l_arr_resp_list (idx_arr_resp_list) 
            || ') for user (' 
            || l_tab_user_list (idx_tab_user_list) 
            || ')'); 
        fnd_user_pkg.addresp ( 
            username    => l_tab_user_list (idx_tab_user_list) 
          ,resp_app    => l_tab_resp (1).application_short_name 
          ,resp_key    => l_tab_resp (1).responsibility_key 
          ,security_group => l_tab_resp (1).security_group_key 
          ,description => NULL 
          ,start_date  => TRUNC (SYSDATE) 
          ,end_date    => NULL); 
          <<goto_arr_resp_list>>  null; 
      END LOOP loop_arr_resp_list; 
      <<goto_tab_user_list>> null; 
  END LOOP loop_tab_user_list; 
  COMMIT; 
EXCEPTION 
  WHEN expt_no_user 
  THEN 
      DBMS_OUTPUT.put_line (l_expt_msg); 
      ROLLBACK; 
  WHEN expt_no_resp 
  THEN 
      DBMS_OUTPUT.put_line (l_expt_msg); 
      ROLLBACK; 
END; 
 
/* 
>>> 1 , working for user (LIAO) <<< 
Adding resp (system Administrator) for user (LIAO) 
Adding resp (Purchasing Super User) for user (LIAO) 
resp (Application Administrator) is not exist or disabled 
>>> 2 , working for user (KARL) <<< 
Adding resp (system Administrator) for user (KARL) 
Adding resp (Purchasing Super User) for user (KARL) 
resp (Application Administrator) is not exist or disabled 
>>> 3 , working for user (xx) <<< 
user (xx) is not exist or disabled 
*/ 
 
/* 
1.  The Oracle PL/SQL GOTO Statement 
http://psoug.org/definition/GOTO.htm 
*/ 

  • 1
  • 2
  • 下一頁

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.