Oracle SQL中是否存在类似"如果不存在创建序列..."的内容?

Tim*_*imo 18 sql oracle sequence

对于我使用Oracle 8 DB的应用程序,我提供了一个SQL脚本来设置触发器,序列等内容,可以将其复制并粘贴到SQL*Plus中.如果我尝试创建的序列已存在,我希望脚本不会因错误而停止.对于触发器,可以使用"创建或替换触发器..."轻松完成,但对于序列,这不起作用.我也试过""如果不存在mysequence然后创建序列..."但它也没有.有没有其他选择?

或者,如果这不可能,有没有办法在没有SQL*Plus的情况下执行"drop sequence mysequence",如果mysequence不存在则中止脚本?

jva*_*jva 15

DECLARE
  v_dummy NUMBER;
BEGIN
  -- try to find sequence in data dictionary
  SELECT 1
  INTO v_dummy
  FROM user_sequences
  WHERE sequence_name = 'MY_SEQUENCE_NAME';

  -- if sequence found, do nothing
EXCEPTION
  WHEN no_data_found THEN
    -- sequence not found, create it
    EXECUTE IMMEDIATE 'create sequence my_sequence_name';
END;
Run Code Online (Sandbox Code Playgroud)


dpb*_*ley 8

如果您确定该脚本将始终在SQL*Plus下运行,则可以使用指令将CREATE SEQUENCE语句括起来继续出错:

WHENEVER SQLERROR CONTINUE
-- create sequences here, ignoring errors
WHENEVER SQLERROR EXIT SQL.SQLCODE
Run Code Online (Sandbox Code Playgroud)

请注意,如果创建序列语句中存在其他错误(权限问题,语法失败等),则会忽略它们


qui*_*ker 5

我喜欢:

DECLARE
  C NUMBER;
BEGIN
  SELECT COUNT(*) INTO C
  FROM ALL_TRIGGERS
  WHERE OWNER = 'YOUROWNER'
  AND TRIGGER_NAME = 'YOURTRIGGER';

  IF (C = 0) THEN
    EXECUTE IMMEDIATE '
      CREATE TRIGGER "YOUROWNER"."YOURTRIGGER"
        blah blah blah your trigger blah blah
    ';
  END IF;
END;
/
Run Code Online (Sandbox Code Playgroud)