Oracle
 sql >> Baza danych >  >> RDS >> Oracle

pl/sql - Używanie dynamicznego zapytania wewnątrz procedury składowanej

Nie buduj zapytania, dołączając ciągi. Narażasz się na wiele błędów i luk, przede wszystkim wstrzyknięcie SQL. Konieczność używania zapytań dynamicznych nie uzasadnia nieużywania zmiennych wiązania. Jeśli naprawdę potrzebujesz użyć zapytań dynamicznych (z twojego przykładu nie jest jasne, dlaczego aktualizacja statyczna nie zadziała?!), zrób to:

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 połączy się poprawnie z odpowiednim typem.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zmiana formatu daty

  2. Wybierz jedną z kilku partycji jednocześnie

  3. JDBC łączy się z bazą danych Oracle za pomocą SSL

  4. Oracle 11g - jak zwrócić rekord z funkcji z dołączeniem do tabeli

  5. Funkcja CHARTOROWID() w Oracle