Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

pl / sql - Sử dụng truy vấn động bên trong một thủ tục được lưu trữ

Không tạo truy vấn của bạn bằng cách nối các chuỗi. Bạn để cho mình nhiều lỗi và lỗ hổng bảo mật, trước hết là SQL injection. Nhu cầu sử dụng truy vấn động không biện minh cho việc không sử dụng các biến ràng buộc. Nếu bạn thực sự cần sử dụng truy vấn động (không rõ từ ví dụ của bạn tại sao cập nhật tĩnh không hoạt động?!), Hãy làm điều này thay thế:

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 sẽ liên kết chính xác với loại thích hợp.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. ORACLE SQL Group BẰNG CÁCH VẪN đưa ra các bản sao

  2. Specifiy classpath dành cho maven

  3. Lệnh gọi ODP.NET của Thư viện Doanh nghiệp trả về ORA-06502:PL / SQL:lỗi số hoặc giá trị

  4. Cách tạo thủ tục lưu trữ PL / SQL mà không cần tham số trong cơ sở dữ liệu Oracle

  5. Oracle APEX Database Trigger - Sự cố với các cột cơ sở dữ liệu tham chiếu