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

Oracle:'Thực thi ngay lập tức' nghĩa là gì?

Nó dành cho chạy SQL động gốc .

Đối với DML, bạn sẽ sử dụng nó khi chạy các câu lệnh mà bạn không có sẵn tại thời điểm biên dịch, ví dụ:nếu danh sách cột dựa trên lựa chọn từ người dùng.

Trong trường hợp của bạn, nó đang được sử dụng vì DDL không thể chạy dưới dạng SQL tĩnh từ bên trong PL / SQL. Chỉ truy vấn nhất định, lệnh DML và TCL hợp lệ . Mọi thứ khác phải được coi là động.

Tôi muốn nói rằng hiếm khi cần sử dụng DDL từ một khối PL / SQL. TRUNCATE có thể là hợp lý; nếu bạn tìm thấy bất cứ thứ gì tạo ra hoặc làm rơi các đối tượng khi đang di chuyển thì đó có thể là vấn đề đáng quan tâm hơn vì nó có thể đề xuất một mô hình dữ liệu dưới mức tối ưu.

EXECUTE IMMEDIATE bản thân nó không tự động cam kết; nhưng nếu bạn thực thi DDL thì điều đó sẽ hoạt động giống như khi bạn chạy nó bên ngoài PL / SQL, vì vậy nó sẽ cam kết trong trường hợp của bạn, vâng.

Ngẫu nhiên, tôi không chắc tại sao mã của bạn đang sử dụng một biến trung gian để giữ câu lệnh; điều đó hữu ích nếu bạn muốn hiển thị những gì nó có thể sẽ chạy, nhưng dường như bạn không làm như vậy. Những gì bạn có thể làm là:

EXECUTE IMMEDIATE 'TRUNCATE TABLE BD_BIDS_EXT_DET';

tức là không sử dụng V_SQL_1 ở tất 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. JDBC:lấy kiểu mảng từ siêu dữ liệu

  2. truy vấn oracle Nối tất cả các cột với ','

  3. Biểu mẫu Oracle trong R12 / R12.2

  4. Sử dụng giá trị của một biến chuỗi trong vòng lặp SQL FOR-IN (SELECT)

  5. thu thập hàng loạt bằng cách sử dụng để cập nhật