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

2 cách tạo bảng nếu nó chưa tồn tại trong Oracle

Cơ sở dữ liệu Oracle không bao gồm IF NOT EXISTS với CREATE TABLE của nó , giống như một số DBMS khác.

Do đó, nếu chúng tôi không muốn tạo ra lỗi do tên bảng đã được sử dụng, chúng tôi cần sử dụng các phương pháp khác để kiểm tra sự tồn tại của bảng.

Tùy chọn 1:Kiểm tra DBA_TABLES Xem

DBA_TABLES là một dạng xem từ điển dữ liệu 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 đã tồn tại hay chưa, sau đó chỉ chạy CREATE TABLE tuyên bố nếu nó chưa tồn tại.

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:='
        CREATE TABLE T1 (
            c1 number(6,0),
            c2 varchar2(10)
        )';
        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 tạo vì không có bảng nào có tên t1 .

Bây giờ, nếu chúng ta cố gắng tạo lại bảng, chúng ta sẽ nhận được cùng một kết quả mà thủ tục PL / SQL đã hoàn tất thành công và sẽ không có lỗi.

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

CREATE TABLE T1 (
    c1 number(6,0),
    c2 varchar2(10)
);

Kết quả:

Error report -
ORA-00955: name is already used by an existing object
00955. 00000 -  "name is already used by an existing object"

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 CREATE TABLE và sau đó bắt bất kỳ lỗi ORA-00955 nào xảy ra. Cụ thể, chúng tôi bắt gặp bất kỳ lỗi SQLCODE -955 nào xảy ra.

Ví dụ:

DECLARE
sql_stmt long;

BEGIN
    sql_stmt:='
    CREATE TABLE T1 (
        c1 number(6,0),
        c2 varchar2(10)
    )';
    EXECUTE IMMEDIATE sql_stmt;

    EXCEPTION
        WHEN OTHERS THEN
            IF SQLCODE = -955 THEN
                NULL;
            ELSE
                RAISE;
            END IF;
END;

Kết quả:

PL/SQL procedure successfully completed.

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

Nếu bảng chưa tồn tại, bảng sẽ được tạo 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. Chuyển đổi hàng thành cột trong Oracle

  2. Tìm kiếm nếu số được chứa trong một biểu thức như:1-3,5,10-15,20

  3. TEMPFILE Chế độ chờ vật lý ngoại tuyến

  4. Cách nhận giá trị UTC cho SYSDATE trên Oracle

  5. Làm thế nào để tạo gói trong Oracle SQL Developer?