Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

Oracle DROP TABLE IF EXISTS Các lựa chọn thay thế

Cơ sở dữ liệu Oracle không bao gồm IF EXISTS mệnh đề mà một số DBMS khác cung cấp trong DROP TABLE của chúng các câu lệnh. Do đó, nếu chúng ta muốn tránh bất kỳ lỗi khó chịu nào do cố gắng bỏ một bảng không tồn tại, chúng ta cần phải thực hiện thêm một chút công việc.

Tùy chọn 1:Kiểm tra xem Bảng có tồn tại không

Chúng tôi có thể kiểm tra DBA_TABLES xem từ điển dữ liệu để xem bảng có tồn tại hay không. Dạng xem này mô tả tất cả các bảng quan hệ trong cơ sở dữ liệu. Các cột của nó giống với các cột trong ALL_TABLES .

Chúng ta có thể kiểm tra bảng này để xem bảng có tồn tại hay không, sau đó chỉ chạy DROP TABLE nếu có.

Ví dụ:

DECLARE
tbl_count number;
sql_stmt long;

BEGIN
    SELECT COUNT(*) INTO tbl_count 
    FROM dba_tables
    WHERE owner = 'HR'
    AND table_name = 'T1';

    IF(tbl_count <> 0)
        THEN
        sql_stmt:='DROP TABLE T1';
        EXECUTE IMMEDIATE sql_stmt;
    END IF;
END;

Kết quả:

PL/SQL procedure successfully completed.

Trong trường hợp này, bảng được gọi là t1 đã tồn tại và đã bị loại bỏ.

Bây giờ, nếu chúng ta chạy lại cùng một mã, chúng ta sẽ nhận được cùng một kết quả:

PL/SQL procedure successfully completed.

Không có lỗi xảy ra, mặc dù bảng không còn tồn tại.

Tuy nhiên, nếu chúng tôi chỉ cố gắng thả bảng mà không kiểm tra sự tồn tại của nó trước tiên, chúng tôi sẽ gặp lỗi:

DROP TABLE T1;

Kết quả:

Error report -
ORA-00942: table or view does not exist
00942. 00000 -  "table or view does not exist"

Tùy chọn 2:Kiểm tra lỗi

Một cách khác để làm điều đó là chỉ cần tiếp tục và chạy DROP TABLE và sau đó bắt bất kỳ lỗi ORA-00942 nào xảy ra. Cụ thể, chúng tôi bắt gặp bất kỳ lỗi SQLCODE -942 nào xảy ra.

Ví dụ:

BEGIN
   EXECUTE IMMEDIATE 'DROP TABLE t1';
EXCEPTION
   WHEN OTHERS THEN
      IF SQLCODE != -942 THEN
         RAISE;
      END IF;
END;

Kết quả:

PL/SQL procedure successfully completed.

Tôi đã chạy nó ngay cả khi T1 bảng không tồn tại. Lỗi ORA-00942 đã được phát hiện và xử lý nên chúng tôi không nhận được thông báo lỗi.

Nếu bảng đã tồn tại, bảng sẽ bị xóa và chúng ta sẽ thấy cùng một kết quả.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. XMLtable với Oracle 11g

  2. Kiểu dữ liệu Oracle:Tôi nên sử dụng VARCHAR2 hay CHAR

  3. Làm cách nào để tạo bản sao của bảng Oracle mà không cần sao chép dữ liệu?

  4. Làm cách nào để tránh lỗi độ dài biến thô quá dài trong SQL Developer?

  5. Oracle - Làm cách nào để lấy kích thước thực của ROW cụ thể?