2010-08-26 21 views
6

Tôi cần tìm bằng cách sử dụng PL/SQL nếu một chuỗi cụ thể có tên là e.g. MY_SEQ thoát. Nếu trình tự tồn tại thì hãy thả nó và tạo một chuỗi mới, hoặc người khác để tạo một chuỗi mới.Cách tìm chuỗi nếu tồn tại bằng cách sử dụng PL/SQL

E.G. (Giả)

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

Lưu ý rằng thả và tái tạo nó sẽ làm mất hiệu lực tất cả các đối tượng mà phụ thuộc vào nó và loại bỏ bất kỳ nổi bật tài trợ. Bạn sẽ cần phải đưa những người trở lại là tốt. Sẽ rất đáng yêu nếu Oracle hỗ trợ 'ALTER SEQUENCE sequence_name RESET;'. –

Trả lời

8

bạn có thể kiểm tra xem từ điển ALL_SEQUENCES (hoặc USER_SEQUENCES nếu người dùng thực hiện là chủ sở hữu), ví dụ:

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, tôi đã làm việc như một sự quyến rũ. –

0

Tôi có một vài ý tưởng cho việc này (tất cả chưa được kiểm tra):

1) Oracle thường hỗ trợ cái gì đó như CREATE OR REPLACE

2) Sử dụng một trong các quan điểm hệ thống từ người dùng SYS để kiểm tra bằng lệnh SELECT xem chuỗi có tồn tại hay không.

3) Sử dụng execute_immediate với khối BEGIN .. EXCEPTION ... END để thả đối tượng. Nếu nó không tồn tại, một lỗi sẽ xảy ra, mà bạn có thể bỏ qua.

+0

# 1 không hoạt động đối với các chuỗi. # 3 là chính xác và phương pháp hiệu quả nhất. –

Các vấn đề liên quan