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

Memasukkan Data Ke Tabel Menggunakan Execute Immediate di Oracle

Anda bisa mendapatkan hasil kueri pertama ke dalam variabel (tanggal) dan kemudian menggunakannya:

SELECT sysdate into query_date FROM dual;
insert into test (my_date) values (query_date)
-- or if you really want dynamic SQL, with a bind variable
EXECUTE IMMEDIATE 'insert into test (my_date) values (:query_date)' using query_date;

Atau membaca pertanyaan Anda secara harfiah, gunakan string pertama sebagai bagian dari string kedua dengan menggabungkannya:

query_date := "SELECT sysdate FROM dual";
EXECUTE IMMEDIATE 'insert into test (my_date) ' || query_date;

Jika Anda mencetak pernyataan kedua alih-alih menjalankannya, Anda akan melihat:

insert into test (my_date) SELECT sysdate FROM dual

... yang merupakan SQL yang valid. Ini akan berfungsi jika query_string lebih rumit atau sedang dibangun secara dinamis. Tetapi jika jumlah ekspresi kolom dalam query_string pilih daftar juga bervariasi, Anda juga harus membuat daftar kolom secara dinamis, jika tidak, Anda akan memiliki terlalu banyak atau terlalu sedikit kolom untuk disisipkan.

Bagaimana tepatnya Anda melakukannya tergantung pada bagaimana Anda membuat string kueri - pada dasarnya saat Anda menambahkan ekspresi ke string kueri, Anda juga akan menambahkan nama kolom ke daftar terpisah, dan berakhir dengan:

EXECUTE IMMEDIATE 'insert into test (' || column_list ' ||) ' || query_string);

di mana column_list dibangun sebagai katakanlah col1, col2 dan query_string sebagai select x.col1, y.col2 from ... .

Tidak ada alasan yang jelas untuk menggunakan SQL dinamis dalam apa yang Anda tunjukkan. Atau, jika Anda benar-benar menggunakan sysdate, perlu kueri terpisah untuk mendapatkannya, seperti yang bisa Anda lakukan:

insert into test (my_date) values (sysdate)

... jadi saya menganggap skenario nyata Anda benar-benar lebih rumit. Tetapi perhatikan bahwa Anda tidak menggunakan values kata kunci dengan insert ... select ... pola. Anda dapat melakukannya dengan satu kolom dan satu subkueri tetapi itu bukanlah ide yang baik, dan tidak akan berfungsi jika Anda memiliki banyak kolom dalam subkueri.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mengimpor data XML di Oracle DB

  2. jalankan string sebagai kueri di Oracle

  3. Bagaimana cara mengatasi java.lang.ClassNotFoundException:Oracle.jdbc.driver.OracleDriver saat runtime?

  4. Parsing file SQL dengan PL/SQL dan DML/DDL menggunakan cx_Oracle dengan python

  5. Cara menggabungkan kueri saya ke satu kueri (atau mungkin proses tersimpan..)