2010-08-26 57 views
6

我需要使用PL/SQL來查找如果某個特定序列名爲例如MY_SEQ退出。如果序列存在,則放棄它並創建一個新的序列,否則只需創建一個新的序列。如何使用PL/SQL查找是否存在序列

E.G. (僞)

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

注意,刪除和重建它會作廢依賴於它的所有對象,並刪除任何懸而未決補助。你也需要把它們放回去。如果Oracle支持'ALTER SEQUENCE sequence_name RESET',那將是可愛的。 – 2010-08-27 16:07:26

回答

8

可以檢查字典視圖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; 
+0

Tnx,我像一個魅力工作。 – 2010-08-26 08:11:19

0

我有這幾個想法(所有未測試):

1)的Oracle通常支持像CREATE OR REPLACE

2)使用從SYS用戶的系統視圖,以用SELECT檢查序列是否存在。

3)使用execute_immediate和BEGIN .. EXCEPTION ... END塊來刪除對象。如果它不存在,則應該發生錯誤,您可以忽略。

+0

#1不適用於序列。 #3是正確和最有效的方法。 – 2010-08-26 12:01:31

相關問題