我正在尝试创建一个脚本,该脚本将创建用户**(如果用户不存在**)。
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中是否有类似的方法来检查用户是否已经存在,然后再尝试创建新用户?
4条答案
按热度按时间lnxxn5zx1#
在Oracle 23 c之前,SQL Server中可用的
IF NOT EXISTS
语法在Oracle中不可用。一般来说,Oracle脚本只是执行
CREATE
语句,如果对象已经存在,您将得到一个错误,您可以忽略它。这是所有标准Oracle部署脚本所做的。但是,如果你真的想检查对象是否存在,并且只在对象不存在的情况下执行,从而避免错误,你可以编写一个
PL/SQL
块。写一个SQL
来检查用户是否存在,如果用户不存在,使用EXECUTE IMMEDIATE
从PL/SQL
块中执行CREATE USER
。这样的PL/SQL块的示例可能是:
从Oracle 23 c开始,可以像这样创建用户:
qqrboqgw2#
你需要写一个pl/sql块。参见示例here
您可以使用一些pl/sql代码检查用户是否存在于all_users表中,如:
然后在IF条件中使用v_count_user有条件地执行create user语句。
ffscu2ro3#
从前面的答案中可以清楚地看出,Oracle不支持
if not exists
。要澄清Oracle在尝试创建一个已经存在的用户时(以及作为奖励,在尝试删除一个不存在的用户时)会抛出哪些错误:以上语句是在Oracle Database 11 g Enterprise Edition Release 11.2.0.1.0 - 64 bit Production上执行的
jqjz2hbq4#
另一种方法是在PL/SQL块中创建用户并捕获ORA-01920错误。这样,当用户存在时,块不会抛出任何错误。