I am trying to create a script that will create users if they do not already exist.
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'
)
The following error is given:
SQL Error: ORA-00922: missing or invalid option
I was able to do this in SQL Server 2008 by using:
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
Is there a similar way in Oracle to check if a user already exists before attempting to create a new user?
The
IF NOT EXISTS
syntax available in SQL Server, is not available in Oracle.In general, Oracle scripts simply execute the
CREATE
statement, and if the object already exist, you'll get an error indicating that, which you can ignore. This is what all the standard Oracle deployment scripts do.However, if you really want to check for existence, and only execute if object doesn't exist, thereby avoiding the error, you can code a
PL/SQL
block. Write aSQL
that checks for user existence, and if it doesn't exist, useEXECUTE IMMEDIATE
to doCREATE USER
from thePL/SQL
block.An example of such a PL/SQL block might be:
Hope that helps.
From the previous answers, it is clear that
if not exists
is not supported in Oracle. To clarify which error(s) are thrown by Oracle when attempting to create an already existing user (and as a bonus, when attempting to drop a non existing user):The statements above were executed on Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
You need to write a pl/sql block. See an example here
You can check if the user exists in the all_users table using some pl/sql code like:
and then use v_count_user in an IF condition to conditionally execute the create user statement.