一段Oracle EBS中给指定用户增加指定职责的PLSQL脚本
在一些比较注重权限的EBS项目中, 普通用户通常没有System Administrator权限, 只能由DBA给一个一个用户一个一个职责加, 纯手工的
一段Oracle EBS中给指定用户增加指定职责的PLSQL脚本
[日期:2012-11-23] 来源:Linux社区 作者:t0nsha [字体:]
在一些比较注重权限的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 Statement
*/

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











InnoDB의 전체 텍스트 검색 기능은 매우 강력하여 데이터베이스 쿼리 효율성과 대량의 텍스트 데이터를 처리 할 수있는 능력을 크게 향상시킬 수 있습니다. 1) InnoDB는 기본 및 고급 검색 쿼리를 지원하는 역 색인화를 통해 전체 텍스트 검색을 구현합니다. 2) 매치 및 키워드를 사용하여 검색, 부울 모드 및 문구 검색을 지원합니다. 3) 최적화 방법에는 워드 세분화 기술 사용, 인덱스의 주기적 재건 및 캐시 크기 조정, 성능과 정확도를 향상시키는 것이 포함됩니다.

이 기사는 MySQL의 Alter Table 문을 사용하여 열 추가/드롭 테이블/열 변경 및 열 데이터 유형 변경을 포함하여 테이블을 수정하는 것에 대해 설명합니다.

전체 테이블 스캔은 MySQL에서 인덱스를 사용하는 것보다 빠를 수 있습니다. 특정 사례는 다음과 같습니다. 1) 데이터 볼륨은 작습니다. 2) 쿼리가 많은 양의 데이터를 반환 할 때; 3) 인덱스 열이 매우 선택적이지 않은 경우; 4) 복잡한 쿼리시. 쿼리 계획을 분석하고 인덱스 최적화, 과도한 인덱스를 피하고 정기적으로 테이블을 유지 관리하면 실제 응용 프로그램에서 최상의 선택을 할 수 있습니다.

예, MySQL은 Windows 7에 설치 될 수 있으며 Microsoft는 Windows 7 지원을 중단했지만 MySQL은 여전히 호환됩니다. 그러나 설치 프로세스 중에 다음 지점이 표시되어야합니다. Windows 용 MySQL 설치 프로그램을 다운로드하십시오. MySQL의 적절한 버전 (커뮤니티 또는 기업)을 선택하십시오. 설치 프로세스 중에 적절한 설치 디렉토리 및 문자를 선택하십시오. 루트 사용자 비밀번호를 설정하고 올바르게 유지하십시오. 테스트를 위해 데이터베이스에 연결하십시오. Windows 7의 호환성 및 보안 문제에 주목하고 지원되는 운영 체제로 업그레이드하는 것이 좋습니다.

기사는 인증서 생성 및 확인을 포함하여 MySQL에 대한 SSL/TLS 암호화 구성에 대해 설명합니다. 주요 문제는 자체 서명 인증서의 보안 영향을 사용하는 것입니다. [문자 수 : 159]

기사는 MySQL Workbench 및 Phpmyadmin과 같은 인기있는 MySQL GUI 도구에 대해 논의하여 초보자 및 고급 사용자를위한 기능과 적합성을 비교합니다. [159 자].

기사는 MySQL에서 파티셔닝, 샤딩, 인덱싱 및 쿼리 최적화를 포함하여 대규모 데이터 세트를 처리하기위한 전략에 대해 설명합니다.

클러스터 인덱스와 비 클러스터 인덱스의 차이점은 1. 클러스터 된 인덱스는 인덱스 구조에 데이터 행을 저장하며, 이는 기본 키 및 범위별로 쿼리에 적합합니다. 2. 클러스터되지 않은 인덱스는 인덱스 키 값과 포인터를 데이터 행으로 저장하며 비 예산 키 열 쿼리에 적합합니다.
