Oracle User가 없는 경우 생성
사용자가 존재하지 않는 경우 사용자를 생성할 스크립트를 생성하려고 합니다.
CREATE USER "Kyle" PROFILE "DEFAULT" IDENTIFIED BY "password" ACCOUNT UNLOCK
WHERE NOT IN //Also tried 'WHERE NOT EXISTS'
(
SELECT username FROM all_users WHERE username = 'Kyle'
)
다음 오류가 발생합니다.
SQL 오류: ORA-00922: 누락되거나 잘못된 옵션
SQL Server 2008에서는 다음을 사용하여 이를 수행할 수 있었습니다.
IF NOT EXISTS
(SELECT name FROM master.sys.server_principals
WHERE name = 'Kyle')
BEGIN
CREATE LOGIN Kyle WITH PASSWORD = 'temppassword' MUST_CHANGE, CHECK_EXPIRATION=ON, CHECK_POLICY=ON
END
Oracle에서도 새 사용자를 만들기 전에 사용자가 이미 존재하는지 확인하는 비슷한 방법이 있습니까?
Oracle 23c 이전에는IF NOT EXISTS
SQL Server에서 사용할 수 있는 구문은 Oracle에서 사용할 수 없습니다.
일반적으로 Oracle 스크립트는 단순히CREATE
statement. 개체가 이미 존재하는 경우 무시할 수 있는 오류가 나타납니다.이것은 모든 표준 Oracle 배포 스크립트가 수행하는 작업입니다.
그러나 존재 여부를 확인하고 개체가 존재하지 않는 경우에만 실행하여 오류를 방지하려면 a를 코드화할 수 있습니다.PL/SQL
블락. 글을 써라.SQL
사용자 존재 여부를 확인하고, 존재하지 않는 경우 사용합니다.EXECUTE IMMEDIATE
하기 위해서CREATE USER
로부터PL/SQL
막다른 골목
이러한 PL/SQL 블록의 예는 다음과 같습니다.
declare
userexist integer;
begin
select count(*) into userexist from dba_users where username='SMITH';
if (userexist = 0) then
execute immediate 'create user smith identified by smith';
end if;
end;
/
Oracle 23c 이후로 다음과 같이 사용자를 생성할 수 있습니다.
create user if not exists smith identified by smith;
pl/sql 블록을 작성해야 합니다.여기서 예제 보기
다음과 같은 pl/sql 코드를 사용하여 all_users 테이블에 사용자가 있는지 확인할 수 있습니다.
SELECT count(*) INTO v_count_user
FROM all_users
WHERE username = 'Kyle'
그런 다음 IF 조건에서 v_count_user를 사용하여 create user 문을 조건부로 실행합니다.
이전의 답변들로 볼 때, 다음과 같은 것이 명백합니다.if not exists
Oracle에서는 지원되지 않습니다.이미 존재하는 사용자를 생성하려고 할 때 Oracle에서 어떤 오류가 발생하는지(기존 사용자가 아닌 사용자를 삭제하려고 할 때 추가로 발생하는 오류)를 명확히 하기 위해 다음과 같이 하십시오.
drop user foo;
ORA-01918: user 'foo' does not exist
create user existing_user IDENTIFIED BY existing_user;
ORA-01920: user name 'existing_user' conflicts with another user or role name
위의 문장은 Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production에서 실행되었습니다.
다른 방법은 PL/SQL 블록에 사용자를 생성하여 ORA-01920 오류를 잡는 것입니다.이렇게 하면 블록은 사용자가 존재할 때 어떠한 오류도 던지지 않습니다.
DECLARE
sqlStatement varchar2(512);
user_exists EXCEPTION;
PRAGMA EXCEPTION_INIT(user_exists, -1920);
BEGIN
sqlStatement := 'CREATE USER "Kyle" ' ||
'IDENTIFIED BY "password" ' ||
'PROFILE "Default" ' ||
'ACCOUNT UNLOCK';
EXECUTE IMMEDIATE sqlStatement;
dbms_output.put_line(' OK: ' || sqlStatement);
EXCEPTION
WHEN user_exists THEN
dbms_output.put_line('WARN: ' || sqlStatement);
dbms_output.put_line('Already exists');
WHEN OTHERS THEN
dbms_output.put_line('FAIL: ' || sqlStatement);
RAISE;
END;
/
언급URL : https://stackoverflow.com/questions/30710990/creating-an-oracle-user-if-it-doesnt-already-exist
'programing' 카테고리의 다른 글
Laravel : 데이터베이스에 첫번째 사용자를 삽입하는 방법 (0) | 2023.09.07 |
---|---|
도커 + Laravel + Mariaadb를 다음을 방지하도록 구성하는 문제:SQLSTATE[HY000] [2002] 잘못된 인수 (0) | 2023.09.07 |
HTML에서 가로 인쇄 (0) | 2023.09.02 |
CrudRepository를 유형으로 확인할 수 없습니다. (0) | 2023.09.02 |
도커 컨테이너가 로컬/호스트 postgres 데이터베이스에 연결할 수 있도록 허용 (0) | 2023.09.02 |