我需要使用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;
我需要使用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;
可以檢查字典視圖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;
Tnx,我像一個魅力工作。 – 2010-08-26 08:11:19
我有這幾個想法(所有未測試):
1)的Oracle通常支持像CREATE OR REPLACE
2)使用從SYS用戶的系統視圖,以用SELECT檢查序列是否存在。
3)使用execute_immediate和BEGIN .. EXCEPTION ... END
塊來刪除對象。如果它不存在,則應該發生錯誤,您可以忽略。
#1不適用於序列。 #3是正確和最有效的方法。 – 2010-08-26 12:01:31
注意,刪除和重建它會作廢依賴於它的所有對象,並刪除任何懸而未決補助。你也需要把它們放回去。如果Oracle支持'ALTER SEQUENCE sequence_name RESET',那將是可愛的。 – 2010-08-27 16:07:26