2015-06-08 31 views
8

zaten mevcut değilse, kullanıcı oluşturacak bir komut dosyası oluşturmaya çalışıyorum.Zaten mevcut değilse bir Oracle Kullanıcı oluşturma

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' 
) 

aşağıdaki hata verilir:

SQL Error: ORA-00922: missing or invalid option

Ben kullanarak SQL Server 2008'de yapmak başardı:

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 

olmadığını kontrol etmek Oracle benzer bir yolu var mı Yeni bir kullanıcı oluşturmaya çalışmadan önce bir kullanıcı zaten var mı?

+2

EXECUTE IMMEDIATE kullanın – 6ton

cevap

11

SQL Server'da kullanılabilen IF NOT EXISTS sözdizimi, Oracle'da bulunmamaktadır.

Genelde Oracle komut dosyaları CREATE ifadesini çalıştırır ve eğer nesne zaten mevcutsa, görmezden gelebileceklerinizi belirten bir hata alırsınız. Bu, tüm standart Oracle dağıtım betiklerini yapıyor. Eğer gerçekten varlığı için kontrol ve nesne böylece hatayı kaçınarak yoksa sadece yürütmek istiyorsanız

Ancak, bir PL/SQL blok kodu olabilir. Kullanıcı varlığını denetleyen bir SQL yazın ve yoksa, PL/SQL satırından CREATE USER yapmak için EXECUTE IMMEDIATE kullanın.

böyle bir PL/SQL bloğu örneği

olabilir: yardımcı

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; 
/

Umut.

3

Bir pl/sql bloğu yazmanız gerekiyor. şartlı kullanıcı deyimini oluşturmak yürütmek için bir IF durumda v_count_user kullanmak sonra

SELECT count(*) INTO v_count_user 
FROM all_users 
WHERE username = 'Kyle' 

ve: Bir örnek here

kullanıcı gibi bazı PL/SQL kodunu kullanarak all_users tablosunda var olmadığını kontrol edebilirsiniz bakın.

1

Önceki yanıtlardan, Oracle'da if not exists'un desteklenmediği açıktır. hangi hatayı (ler) netleştirmek için (mevcut olmayan bir kullanıcıyı damla çalışırken ve bonus olarak) mevcut bir kullanıcı oluşturmak çalışırken Oracle tarafından atılan gibidir:

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 

Yukarıdaki ifadeler, Oracle Veritabanı idam edildi 11g Enterprise Edition Sürüm 11.2.0.1.0 - 64bit Üretim

İlgili konular