如何使用PL / SQL查找序列是否存在

时间:2010-08-26 07:54:53

标签: oracle plsql

我需要找到使用PL / SQL的特定序列,例如MY_SEQ退出。如果序列存在,则删除它并创建一个新序列,否则只创建一个新序列。

E.G。 (伪代码)

IF EXISTS(MY_SEQ) THEN
BEGIN
   DROP SEQUENCE MY_SEQ;
   CREATE SEQUENCE MY_SEQ...
END;
ELSE
BEGIN
  CREATE SEQUENCE MY_SEQ;
END;

2 个答案:

答案 0 :(得分:9)

您可以查看字典视图ALL_SEQUENCES(如果正在执行的用户是所有者,则为USER_SEQUENCES),例如:

BEGIN
   FOR cc IN (SELECT sequence_name as sequence_exists
                FROM all_sequences
               WHERE sequence_owner = :seq_owner
                 AND sequence_name = :seq_name) LOOP
      -- sequence exists, drop it (at most there will be *one* sequence)
      EXECUTE IMMEDIATE 'DROP SEQUENCE XXX';
   END LOOP;
   -- create sequence
   EXECUTE IMMEDIATE 'CREATE SEQUENCE XXX';
END;

答案 1 :(得分:0)

我有几个想法(所有未经测试):

1)Oracle通常支持CREATE OR REPLACE

之类的东西

2)使用SYS用户的一个系统视图来检查SELECT是否存在序列。

3)将execute_immediate与BEGIN .. EXCEPTION ... END块一起使用以删除对象。如果它不存在,则应该发生错误,您可以忽略该错误。