sql >> Database >  >> RDS >> Oracle

pl/sql - Een dynamische query gebruiken in een opgeslagen procedure

Bouw uw query niet op door tekenreeksen toe te voegen. Je stelt jezelf bloot aan veel bugs en kwetsbaarheden, allereerst SQL-injectie. De noodzaak om dynamische query's te gebruiken rechtvaardigt niet het gebruik van bindvariabelen. Als je echt dynamische queries moet gebruiken (het is niet duidelijk uit je voorbeeld waarom statische update niet zou werken?!), doe dan dit:

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 zal correct binden met het juiste type.



  1. Hoe voeg je meerdere rijen tegelijk in een mysql-database in met voorbereide instructies?

  2. dubbele vermeldingen in de database voorkomen

  3. Hoe een afbeelding van een mysql-blob weer te geven

  4. Hoe REVERSE() werkt in MariaDB