Oracle
 sql >> база данни >  >> RDS >> Oracle

pl/sql - Използване на динамична заявка в съхранена процедура

Не създавайте вашата заявка чрез добавяне на низове. Оставяте се отворени за много грешки и уязвимости, на първо място SQL инжекция. Необходимостта от използване на динамични заявки не оправдава неизползването на свързващи променливи. Ако наистина трябва да използвате динамични заявки (от вашия пример не става ясно защо статичната актуализация няма да работи?!), направете това вместо това:

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 ще се свърже правилно с подходящия тип.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Използването на distinct в колона и изпълнението на order by в друга колона дава грешка

  2. Разделяне на низ, ограничен от тръбата, в колони?

  3. Lotus Notes XPages за дизайн и Oracle (или друга RDBMS) за данни

  4. ORA-12704:несъответствие на набора от знаци

  5. Как да извикате pl/sql анонимен блок от pl/sql анонимен блок