Kyl*_*son 10 oracle oracle11g createuser
我正在尝试创建一个脚本,如果用户尚不存在,将创建用户.
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'
)
Run Code Online (Sandbox Code Playgroud)
给出以下错误:
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
Run Code Online (Sandbox Code Playgroud)
在尝试创建新用户之前,Oracle是否有类似的方法来检查用户是否已经存在?
Mar*_*bak 14
IF NOT EXISTSSQL Server中提供的语法在Oracle中不可用.
通常,Oracle脚本只是执行该CREATE语句,如果该对象已经存在,您将收到一个错误,指出您可以忽略该错误.这就是所有标准Oracle部署脚本的功能.
但是,如果您确实要检查是否存在,并且仅在对象不存在时执行,从而避免错误,则可以对PL/SQL块进行编码.写一个SQL用于检查用户是否存在的文件,如果它不存在,则使用该块EXECUTE IMMEDIATE来执行.CREATE USERPL/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;
/
Run Code Online (Sandbox Code Playgroud)
希望有所帮助.
你需要编写一个pl/sql块.在这里查看示例
您可以使用一些pl/sql代码检查用户是否存在于all_users表中,例如:
SELECT count(*) INTO v_count_user
FROM all_users
WHERE username = 'Kyle'
Run Code Online (Sandbox Code Playgroud)
然后在IF条件中使用v_count_user来有条件地执行create user语句.