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

Câu lệnh DDL trong PL / SQL?

Tôi giả sử bạn đang làm điều gì đó giống như sau:

declare
   v_temp varchar2(20);
begin
   execute immediate 'create table temp(name varchar(20))';
   execute immediate 'insert into temp values(''XYZ'')';

   select name into v_name from temp;
end;

Tại thời điểm biên dịch bảng, TEMP , không tồn tại . Nó vẫn chưa được tạo. Vì nó không tồn tại, bạn không thể chọn từ nó; do đó bạn cũng phải thực hiện SELECT động. Thực sự không cần thực hiện CHỌN trong cụ thể này mặc dù bạn có thể sử dụng returning into cú pháp.

declare
   v_temp varchar2(20)
begin
   execute immediate 'create table temp(name varchar2(20))';
   execute immediate 'insert into temp 
                      values(''XYZ'')
                      returning name into :1'
                returning into v_temp;
end;

Tuy nhiên, việc cần tạo các bảng một cách tự động thường là dấu hiệu của một lược đồ được thiết kế kém. Nó không thực sự cần thiết.

Tôi có thể giới thiệu René Nyffenegger của post "Tại sao SQL động lại kém?" để biết lý do tại sao bạn nên tránh SQL động, nếu có thể, từ quan điểm hiệu suất. Cũng xin lưu ý rằng bạn cởi mở hơn nhiều với Chèn SQL và nên sử dụng các biến liên kết và DBMS_ASSERT để giúp bảo vệ chống lại nó.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL - Thiếu dấu ngoặc đơn bên phải

  2. Tạo dữ liệu thử nghiệm bằng Oracle PL / SQL developer

  3. Tính tỷ lệ phần trăm của gốc thuộc sở hữu của bố mẹ nó

  4. Oracle.DataAccess không có sẵn để lựa chọn trong Visual Studio 2013

  5. Thay đổi kiểu dữ liệu trong oracle mà không xóa dữ liệu