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.