博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Oracle EBS R12 - 一段Oracle EBS中给指定用户增加指定职责的PLSQL脚本
阅读量:4177 次
发布时间:2019-05-26

本文共 9744 字,大约阅读时间需要 32 分钟。

在一些比较注重权限的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  <
> 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 <
> 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); <
> null; END LOOP loop_arr_resp_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 Statementhttp://psoug.org/definition/GOTO.htm*/
2. Based on EBS R12.1/Oracle DB 11gR2

DECLARE   -- script to add user responsibility for R12.1/11gR2   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  <
> 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; END IF; -- loop responsibility <
> 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; 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); END LOOP loop_arr_resp_list; 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*/

转载地址:http://gjtai.baihongyu.com/

你可能感兴趣的文章
TestNG概述
查看>>
TestNG中测试方法的依赖关系详解
查看>>
TestNG中的运行时测试实例工厂详解
查看>>
TestNG测试的并发执行详解
查看>>
TestNG的监听器概述
查看>>
TestNG的IAnnotationTransformer监听器详解
查看>>
TestNG的IMethodInterceptor监听器详解
查看>>
TestNG的IHookable监听器详解
查看>>
TestNG的IConfigurable监听器详解
查看>>
TestNG的IConfigurationListener监听器详解
查看>>
TestNG的IExecutionListener监听器详解
查看>>
TestNG的ISuiteListener监听器和IAlterSuiteListener监听器详解
查看>>
Maven的settings.xml文件结构之profiles
查看>>
在Suse Linux 11 SP4中启动eclipse时的Failed to load module "pk-gtk-module"异常
查看>>
Linux下的cURL工具概述
查看>>
Eclipse的UML建模插件Papyrus概述
查看>>
UML建模工具UMLet概述
查看>>
单元测试辅助工具Hamcrest概述
查看>>
Java 7中的try-with-resources语句
查看>>
Virtual Environment用法详解
查看>>