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

Sintaks SQL dinamis menggunakan EXECUTE IMMEDIATE

PERINGATAN :SQL Dinamis seperti ini rentan terhadap serangan SQL Injection. Jika memungkinkan, tulis ulang SQL dinamis Anda untuk menggunakan variabel bind.

Alih-alih membangun SQL dinamis Anda seperti ini:

L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = '||i.CUSTOMER_REF_ID||' WHERE CUSTOMER_ID = '||i.CUSTOMER_ID;
EXECUTE IMMEDIATE L_SQL;

Gunakan ini:

L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID WHERE CUSTOMER_ID = :CUST_ID';
EXECUTE IMMEDIATE L_SQL USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;

Ini masih tunduk pada injeksi SQL di l_prefix , tetapi jika Anda mengontrol nilai itu secara terprogram, mungkin tidak masalah. Juga membagi konstruksi SQL dan eksekusi SQL menjadi dua langkah memungkinkan Anda untuk lebih mudah mengganti EXECUTE IMMEDIATE dengan DBMS_OUTPUT.PUT_LINE(SQL); untuk memeriksa kueri Anda untuk kesalahan sintaksis. Anda juga dapat ingin DBMS_OUTPUT.PUT_LINE parameter Anda i.CUSTOMER_REF_ID dan i.CUSTOMER_ID untuk memeriksa nilainya.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bagaimana cara mengubah tabel saya yang ada untuk membuat partisi rentang di Oracle

  2. Cara menggunakan ora_hash pada kolom tipe data xmltype

  3. Ulangi nilai yang telah ditentukan sebelumnya

  4. RAWTONHEX() Fungsi di Oracle

  5. AWS Python Lambda dengan Oracle - Pembuatan OID Gagal bahkan setelah menambahkan HOSTALIASES