1. 程式人生 > >一段Oracle EBS中給指定使用者增加指定職責的PLSQL指令碼

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

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

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

  1. DECLARE
  2.    -- script to add user responsibility for R12.0/10gR2
  3.    TYPE tab_user_list ISTABLEOF
     VARCHAR2 (100);  
  4.    TYPE arr_resp_list IS VARRAY (100) OF VARCHAR2 (100);  
  5.    -- user to be changed
  6.    l_tab_user_list tab_user_list  
  7.                      := tab_user_list ('LIAO'
  8.                                       ,'KARL'
  9.                                       ,'xx');  
  10.    -- responsibility to be added
  11.    l_arr_resp_list arr_resp_list  
  12.                      := arr_resp_list ('system Administrator'
  13.                                       ,'Purchasing Super User'
  14.                                       ,'Application Administrator');  
  15.    CURSOR cur_user (  
  16.       pc_username IN VARCHAR2)  
  17.    IS
  18.       SELECT fu.user_id  
  19.             ,fu.user_name  
  20.       FROM   fnd_user fu  
  21.       WHERE  fu.user_name = pc_username  
  22.              AND TRUNC (SYSDATE) BETWEEN TRUNC (NVL (fu.start_date, SYSDATE))  
  23.                                      AND TRUNC (NVL (fu.end_date, SYSDATE));  
  24.    TYPE tab_user ISTABLEOF cur_user%ROWTYPE;  
  25.    l_tab_user     tab_user;  
  26.    CURSOR cur_resp (  
  27.       pc_resp IN VARCHAR2)  
  28.    IS
  29.       SELECT fa.application_id  
  30.             ,fa.application_short_name  
  31.             ,fr.responsibility_id  
  32.             ,fr.responsibility_name  
  33.             ,fr.responsibility_key  
  34.             ,fsg.security_group_key  
  35.       FROM   fnd_application fa  
  36.             ,fnd_responsibility_vl fr  
  37.             ,fnd_security_groups fsg  
  38.       WHERELOWER (fr.responsibility_name) = LOWER (pc_resp)  
  39.              AND fa.application_id = fr.application_id  
  40.              AND fr.data_group_id = fsg.security_group_id;  
  41.    TYPE tab_resp ISTABLEOF cur_resp%ROWTYPE;  
  42.    l_tab_resp     tab_resp;  
  43.    expt_no_user   EXCEPTION;  
  44.    expt_no_resp   EXCEPTION;  
  45.    l_expt_msg     VARCHAR2 (2000);  
  46. BEGIN
  47.    --l_tab_user_list := tab_user_list ();
  48.    IF (l_tab_user_list.COUNT = 0)  
  49.    THEN
  50.       l_expt_msg  := 'no user to change';  
  51.       RAISE expt_no_user;  
  52.    END IF;  
  53.    --l_arr_resp_list     := arr_resp_list ();
  54.    IF (l_arr_resp_list.COUNT = 0)  
  55.    THEN
  56.       l_expt_msg  := 'no resp to add';  
  57.       RAISE expt_no_resp;  
  58.    END IF;  
  59.   -- loop user
  60.   <<loop_tab_user_list>>  
  61.    FOR idx_tab_user_list IN l_tab_user_list.FIRST .. l_tab_user_list.LAST
  62.    LOOP  
  63.       DBMS_OUTPUT.put_line (  
  64.             '>>> '
  65.          || idx_tab_user_list  
  66.          || ' , working for user ('
  67.          || l_tab_user_list (idx_tab_user_list)  
  68.          || ') <<< ');  
  69.       -- check if user exist or active
  70.       OPEN cur_user (l_tab_user_list (idx_tab_user_list));  
  71.       FETCH cur_user  
  72.       BULK   COLLECT INTO l_tab_user;  
  73.       CLOSE cur_user;  
  74.       IF (l_tab_user.COUNT = 0)  
  75.       THEN
  76.          DBMS_OUTPUT.put_line (  
  77.                'user ('
  78.             || l_tab_user_list (idx_tab_user_list)  
  79.             || ') is not exist or disabled');  
  80.          --CONTINUE loop_tab_user_list;
  81.          goto  goto_tab_user_list;  
  82.       END IF;  
  83.      -- loop responsibility
  84.      <<loop_arr_resp_list>>  
  85.       FOR idx_arr_resp_list IN l_arr_resp_list.FIRST .. l_arr_resp_list.LAST
  86.       LOOP  
  87.          -- check if responsibility active
  88.          OPEN cur_resp (l_arr_resp_list (idx_arr_resp_list));  
  89.          FETCH cur_resp  
  90.          BULK   COLLECT INTO l_tab_resp;  
  91.          CLOSE cur_resp;  
  92.          IF (l_tab_resp.COUNT = 0)  
  93.          THEN
  94.             DBMS_OUTPUT.put_line (  
  95.                   'resp ('
  96.                || l_arr_resp_list (idx_arr_resp_list)  
  97.                || ') is not exist or disabled');  
  98.             --CONTINUE loop_arr_resp_list;
  99.             goto  goto_arr_resp_list;  
  100.          END IF;  
  101.          -- add resp for user
  102.          DBMS_OUTPUT.put_line (  
  103.                'Adding resp ('
  104.             || l_arr_resp_list (idx_arr_resp_list)  
  105.             || ') for user ('
  106.             || l_tab_user_list (idx_tab_user_list)  
  107.             || ')');  
  108.          fnd_user_pkg.addresp (  
  109.             username    => l_tab_user_list (idx_tab_user_list)  
  110.            ,resp_app    => l_tab_resp (1).application_short_name  
  111.            ,resp_key    => l_tab_resp (1).responsibility_key  
  112.            ,security_group => l_tab_resp (1).security_group_key  
  113.            ,description => NULL
  114.            ,start_date  => TRUNC (SYSDATE)  
  115.            ,end_date    => NULL);  
  116.            <<goto_arr_resp_list>>  null;  
  117.       

    相關推薦

    Oracle EBS指定使用者增加指定職責PLSQL指令碼

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

    視頻按幀提取圖片

    imp book ima open HA image %d 數據 使用 這裏實現的是從一段視頻中每10幀讀取第10幀圖片,代碼如下: # -*- coding:utf-8 -*- #視頻中按序列提取幀,獲得訓練數據 import cv2 import os

    sql server的charindex函數用法解析(在字符搜索字符或者字符串-----返回expression1在expression2出現的位置;反之,返回0)

    abcde char 解析 ssi num 結果 -- art pan https://blog.csdn.net/xinghuo0007/article/details/70651358 知識點一:charindex()語法 CHARINDEX ( exp

    Oracle EBS列印二維碼

    Oracle EBS暫時還只支援一維碼,所以如需要二維碼的列印和掃描,需要自行開發。PL/SQL還沒有成熟的二維碼生成類庫,但Java已有很多二維碼生成和解碼的第三方類庫(比如,QRCode,ZXing

    怎樣把視頻的音樂剪切下來

    1.5 文件添加 下載 幫助 term text 想法 如果 alt 有一些視頻中的歌曲非常好聽,可是如果我們相對這首歌曲進行剪切的話,該如何操作呢?平時在欣賞一段影片的時候都會有這種將音樂剪切下來的想法,所以今天就整理了一篇怎麽把一段視頻中的音頻剪切下來的內容,大家感興趣

    java當前日期增加固定的天數

    //將要增加的日期和要加的天數轉換成毫秒 long effectiveDate = (new Date()).getTime()+(int)days*24*60*60*1000; //建立Calendar物件,用來轉換 Calendar calendar = Calendar.getInstanc

    Java 寫字元到指定的文字文件,如果該文字文件不存在,則建立該文字文件

    寫一段字元到指定的文字文件中,如果該文字文件不存在,則建立該文字文件 1 import java.io.File; 2 import java.io.FileNotFoundException; 3 import java.io.FileOutputStream; 4 import java.

    oracle 每天備份指定表的資料到另外張備份表

    因為有一張中轉資料的表,資料量特別大不能儲存太久,但是最近幾天的有可能要使用。所以只保留7天的資料量,其他的資料按月重新建表分開儲存,用以備份。 首先建立備份的儲存過程 CREATE OR REPLACE PROCEDURE P_DAYCLEAR IS V_TABLE

    C++ 隊列queue玄學代碼

    原因 gin p s emp printf empty ont ffffff pro 代碼: mtx.lock(); printf("node %d push localW prepared,and local flag=%d,clock=%d\n",procID,l

    jseasyui的列添加按鈕

    clas easy eas index style lai detailed 發放 btn $("#totalTb").datagrid({ columns: [[ { field: ‘ENTITY_ACTNAME‘, title: ‘活動

    JavaSE7基礎 找到維數組指定數值(第一次出現)的索引值 do-while循環實現

    學習資源 public 不可用 oid 索引 ati 精華 args 運行 版本參數:jdk-7u72-windows-i586註意事項:博文內容僅供參考,不可用於其他用途。 代碼 class Demo{ public static void main(Stri

    WinForm,每隔時間(參數)調用次函數(使用定時器)

    pre tick break switch 時間 器) chan pri args 1      System.Windows.Forms.Timer setTimer; //定義一個定時器 2 int flg = 0;

    統計oracle的個數

    nbsp pre rom count brush ble clas where all select count(column_name) from user_tab_columns where table_name=‘emp‘ dba權限對應的視圖是dba_tab

    javascript組件封裝通用代碼解讀

    img 中一 factor log func 解讀 amd oba 通過 有圖有真相,先上圖。 相信很多想去研究源碼的小夥伴一定被這段代碼給嚇著了把,直接就打消了往下看下去的想法。我剛開始看的時候也是有點一頭霧水,這是什麽東東這麽長,但是慢慢分析你就會發現其中的奧秘,

    C# 寫得很不錯的代碼摘出來

    spa edi model png off callback 代碼 iss back private void LikeMyworkEvent(EditedImg img, bool islike) //點贊自己的作品 { if (Applica

    組集合獲取,分多次取集合的每數據的最大值,重組成一個新的集合。

    clas pub 處理 oat private color andro sublist roi 一個項目中偶遇的簡單算法,個人覺得還不錯,雖不常用,也記錄在此吧。 1 package huolongluo.qihuo.util; 2 3 import androi

    TensorFlow實現Softmax Regression識別手寫數字"TimeoutError: [WinError 10060] 由於連接方在時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗”問題

    http 截圖 技術 數字 alt 分享圖片 inf 主機 orf 出現問題: 在使用TensorFlow實現MNIST手寫數字識別時,出現“TimeoutError: [WinError 10060] 由於連接方在一段時間後沒有正確答復或連接的主機沒有反應,連接嘗試失敗”

    《愛麗絲夢遊仙境》對話

    block 不知道 details 要去 post 去哪兒 class tails 說道 我很喜歡《愛麗絲夢遊仙境》中的一段對話: 一天,愛麗絲走到了一個岔路口,看見樹上趴著一只柴郡貓。 “我該走哪條路呢?”她問道。 “你要去哪

    php使用curl來postjson數據

    問題 mozilla gecko 處理 行數 agent body nts 本地 場景:在調用第三方接口時經常需要使用到curl進行數據交互,在初次使用時遇到一些小問題,記錄下來隨時查閱。 封裝curl相關方法便於使用,方法如下: /** * @param $url

    MySQL添加索引

    數據 TE fulltext alter http 速度 訪問 HR AI 1 普通索引 ALTER TABLE `table_name` ADD INDEX index_name ( `column` ) 2 主鍵索引 ALTER TABLE `table_name