忽略用户在Oracle中存在错误

时间:2015-06-10 19:32:59

标签: oracle error-handling sqlplus createuser

我创建了一个创建Oracle用户并授予他们角色的脚本。我无法找到忽略“用户存在”错误的方法:

  

ORA-01920:用户名''与其他用户或角色名称冲突。

据我所知,当脚本运行时,用户可能已经存在,但我想忽略任何返回的错误。这可能吗?

我的Oracle代码:

CREATE USER "John" PROFILE "DEFAULT" IDENTIFIED BY "temppassword" ACCOUNT UNLOCK;

修改 如果用户不存在,这个问题不是询问如何创建用户。这个问题是询问如何忽略“用户存在”错误。根据之前提出的问题,最佳答案说明了

  

通常,Oracle脚本只执行CREATE语句,如果   对象已经存在,你会得到一个错误,表明,哪个   你可以忽略。这是所有标准Oracle部署的最新情况   脚本。

3 个答案:

答案 0 :(得分:1)

为什么你不能找到用户是否先存在?

SELECT COUNT(*) 
INTO V_count 
from ALL_USERS 
where username = 'YourUserName'

IF v_count = 0 THEN
  --create the user
  --execute the grants
ELSE
  ---log that the user already exists
END IF;

答案 1 :(得分:1)

  componentWillReceiveProps: (newProps) ->
    console.log "newProps", newProps.account.subbableProperties
    console.log "newProps", newProps.account.subbableProperties.length
    console.log "props", @props.account.subbableProperties
    console.log "props", @props.account.subbableProperties.length

    if !(_.isEqual(newProps.account.subbableProperties, @props.account.subbableProperties))
      alert("it happens in willReceiveProps!")

答案 2 :(得分:1)

您不清楚自己如何运行脚本,但假设通过SQL * Plus,您可以在the whenever sqlerror command遇到错误时修改行为。

如果您的脚本目前设置为exit,或者您从启动脚本(login.sqlglogin.sql)中选择了该脚本,则可以将其更改回来,或暂时修改它:

...
-- do not stop on error
WHENEVER SQLERROR CONTINUE;
CREATE USER "John" PROFILE "DEFAULT" IDENTIFIED BY "temppassword" ACCOUNT UNLOCK;
-- to stop when later errors are encountered
WHENEVER SQLERROR EXIT FAILURE;
ALTER USER ...

您仍然会在输出中看到ORA-01920,但它会继续执行下一个语句。在尝试创建模式对象之前,此模式对于保护性删除模式对象也很有用。