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

pl/sql - Menggunakan kueri dinamis di dalam prosedur tersimpan

Jangan buat kueri Anda dengan menambahkan string. Anda membiarkan diri Anda terbuka terhadap banyak bug dan kerentanan, pertama-tama injeksi SQL. Kebutuhan untuk menggunakan kueri dinamis tidak membenarkan untuk tidak menggunakan variabel ikat. Jika Anda benar-benar perlu menggunakan kueri dinamis (tidak jelas dari contoh Anda mengapa pembaruan statis tidak berfungsi?!), lakukan ini sebagai gantinya:

FOR vc2 IN (...) LOOP
   v_sql := 
       'BEGIN
            V_UPD NUMBER := 0;

            SELECT (SELECT ID_TIPO_TERR  
              FROM ZREPORTYTD_TMP 
             WHERE AUDITORIA = :p1
               AND TERRITORIO = :p2
               AND PRODUTO = :p3) 
              INTO V_UPD FROM DUAL;

            UPDATE ZReportYTD_TMP
               SET TARGET = :p4
             WHERE AUDITORIA = :p5
               AND TERRITORIO = :p6
               AND PRODUTO = :p7;
        END';
   EXECUTE IMMEDIATE v_sql USING VC2.AUDITORIA, VC2.NOME, VC2.PRODUTO, 
                                 VC2.OBJETIVO, VC2.AUDITORIA, VC2.NOME, 
                                 VC2.PRODUTO;
END LOOP;

Oracle akan mengikat dengan benar dengan tipe yang sesuai.



  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 memilih 100 baris teratas di Oracle?

  2. Oracle menganggap string kosong sebagai NULL sementara SQL Server tidak - bagaimana cara terbaik menangani ini?

  3. Pisahkan string dengan spasi dan karakter sebagai pembatas di Oracle dengan regexp_substr

  4. Aman TO_NUMBER()

  5. Oracle memanggil prosedur tersimpan di dalam pilih