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

Làm cách nào để kiểm tra xem một cột có tồn tại hay không trước khi thêm nó vào bảng hiện có trong PL / SQL?

Tất cả siêu dữ liệu về các cột trong Cơ sở dữ liệu Oracle đều có thể truy cập được bằng một trong các dạng xem sau.

user_tab_cols; - Đối với tất cả các bảng do người dùng sở hữu

all_tab_cols; - Đối với tất cả các bảng mà người dùng có thể truy cập

dba_tab_cols; - Đối với tất cả các bảng trong Cơ sở dữ liệu.

Vì vậy, nếu bạn đang tìm kiếm một cột như ADD_TMS trong Bảng SCOTT.EMP và chỉ thêm cột nếu nó không tồn tại, thì Mã PL / SQL sẽ nằm dọc theo những dòng này ..

DECLARE
  v_column_exists number := 0;  
BEGIN
  Select count(*) into v_column_exists
    from user_tab_cols
    where upper(column_name) = 'ADD_TMS'
      and upper(table_name) = 'EMP';
      --and owner = 'SCOTT --*might be required if you are using all/dba views

  if (v_column_exists = 0) then
      execute immediate 'alter table emp add (ADD_TMS date)';
  end if;
end;
/

Nếu bạn định chạy nó dưới dạng một tập lệnh (không phải một phần của thủ tục), thì cách dễ nhất là đưa lệnh thay đổi vào tập lệnh và xem các lỗi ở cuối tập lệnh, giả sử bạn không có Bắt đầu cho kịch bản ..

Nếu bạn có file1.sql

alter table t1 add col1 date;
alter table t1 add col2 date;
alter table t1 add col3 date;

Và col2 hiện diện, khi tập lệnh được chạy, hai cột khác sẽ được thêm vào bảng và nhật ký sẽ hiển thị lỗi cho biết "col2" đã tồn tại, vì vậy bạn không sao cả.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. oracle sql:cập nhật nếu tồn tại khác chèn

  2. Tại sao tôi không thể sử dụng các biến liên kết trong các câu lệnh DDL / SCL trong SQL động?

  3. 2 cách để lấy số phút từ giá trị ngày giờ trong cơ sở dữ liệu Oracle

  4. Đảo ngược trong Oracle đường dẫn này z / y / x thành x / y / z

  5. Làm thế nào để gọi hàm Oracle trong Python?