Oracle
 sql >> Teknologi Basis Data >  >> RDS >> Oracle

Pernyataan DDL dalam PL/SQL?

Saya berasumsi Anda melakukan sesuatu seperti berikut:

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;

Pada waktu kompilasi tabel, TEMP , tidak ada . Itu belum dibuat. Karena tidak ada, Anda tidak dapat memilihnya; karena itu Anda juga harus melakukan SELECT secara dinamis. Sebenarnya tidak perlu melakukan SELECT dalam khusus ini situasi meskipun Anda dapat menggunakan returning into sintaks.

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;

Namun, kebutuhan untuk membuat tabel secara dinamis biasanya merupakan indikasi skema yang dirancang dengan buruk. Seharusnya tidak perlu.

Saya dapat merekomendasikan René Nyffenegger's posting "Mengapa SQL dinamis buruk?" untuk alasan mengapa Anda harus menghindari SQL dinamis, jika memungkinkan, dari sudut pandang kinerja. Perlu diketahui juga bahwa Anda jauh lebih terbuka untuk Injeksi SQL dan harus menggunakan variabel bind dan DBMS_ASSERT untuk membantu menjaganya.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TEMPFILE Offline Fisik Siaga

  2. Titik koma hilang setelah mengekstrak DDL melalui skrip ksh

  3. Permintaan rekursif di Oracle

  4. Menanyakan kolom gumpalan Oracle

  5. Membuat Pilihan tentang Migrasi Oracle PL/SQL ke Kelas Java / EJB