2015-06-08 19 views
8

मैं एक ऐसी स्क्रिप्ट बनाने की कोशिश कर रहा हूं जो उपयोगकर्ताओं को बनाएगा यदि वे पहले से मौजूद नहीं हैंओरेकल उपयोगकर्ता बनाना अगर यह पहले से मौजूद नहीं है

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 Error: ORA-00922: missing or invalid option

मैं का उपयोग करके एसक्यूएल सर्वर 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 में एक समान तरीके से करता है, तो जाँच करने के लिए है नया उपयोगकर्ता बनाने का प्रयास करने से पहले कोई उपयोगकर्ता पहले से मौजूद है?

+2

तत्काल तत्काल उपयोग करें – 6ton

उत्तर

11

SQL सर्वर में उपलब्ध IF NOT EXISTS वाक्यविन्यास, ओरेकल में उपलब्ध नहीं है।

सामान्य रूप से, ओरेकल स्क्रिप्ट्स केवल CREATE कथन निष्पादित करती हैं, और यदि ऑब्जेक्ट पहले से मौजूद है, तो आपको यह इंगित करने में एक त्रुटि मिलेगी, जिसे आप अनदेखा कर सकते हैं। यह सभी मानक ओरेकल परिनियोजन स्क्रिप्ट करता है।

हालांकि, अगर आप वास्तव में होने की जाँच करने के लिए, और केवल पर अमल करता है, तो वस्तु, मौजूद नहीं है जिससे त्रुटि से बचने चाहते हैं, तो आप एक PL/SQL ब्लॉक कोड कर सकते हैं। SQL लिखें जो उपयोगकर्ता के अस्तित्व की जांच करता है, और यदि यह अस्तित्व में नहीं है, तो EXECUTE IMMEDIATEPL/SQL ब्लॉक से CREATE USER करने के लिए उपयोग करें।

इस तरह के एक 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; 
/

आशा है कि मदद करता है।

3

आपको एक पीएल/एसक्यूएल ब्लॉक लिखने की जरूरत है।

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

और फिर एक अगर हालत में v_count_user का उपयोग सशर्त उपयोगकर्ता बयान बनाने निष्पादित करने के लिए: एक उदाहरण here

आप देख सकते हैं उपयोगकर्ता all_users तालिका में मौजूद रहने पर जैसे कुछ PL/SQL कोड का उपयोग कर देखें।

1

पिछले उत्तरों से, यह स्पष्ट है कि if not exists ओरेकल में समर्थित नहीं है। जो त्रुटि (रों) स्पष्ट करने के लिए जब एक पहले से ही मौजूदा उपयोगकर्ता (और एक बोनस के रूप में, जब एक गैर मौजूदा उपयोगकर्ता ड्रॉप करने का प्रयास) बनाने के प्रयास में ओरेकल द्वारा फेंक दिया जाता है:

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 डाटाबेस पर मार डाला गया 11 जी एंटरप्राइज़ संस्करण रिलीज 11.2.0.1.0 - 64 बिट उत्पादन

संबंधित मुद्दे