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

Cú pháp SQL động sử dụng THỰC HIỆN NGAY LẬP TỨC

CẢNH BÁO :SQL động như thế này dễ bị tấn công SQL Injection. Bất cứ nơi nào có thể, hãy viết lại SQL động của bạn để sử dụng các biến liên kết thay thế.

Thay vì xây dựng SQL động của bạn như thế này:

L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = '||i.CUSTOMER_REF_ID||' WHERE CUSTOMER_ID = '||i.CUSTOMER_ID;
EXECUTE IMMEDIATE L_SQL;

Sử dụng cái này:

L_SQL := 'UPDATE '||l_prefix||'CRS_CUSTOMERS SET CUSTOMER_SOURCE_REF_ID = :REF_ID WHERE CUSTOMER_ID = :CUST_ID';
EXECUTE IMMEDIATE L_SQL USING i.CUSTOMER_REF_ID, i.CUSTOMER_ID;

Điều này vẫn phải được đưa vào SQL tại l_prefix , nhưng nếu bạn kiểm soát giá trị đó theo chương trình thì có thể OK. Ngoài ra, việc tách việc xây dựng SQL và thực thi SQL thành hai bước cho phép bạn dễ dàng thay thế EXECUTE IMMEDIATE với DBMS_OUTPUT.PUT_LINE(SQL); để kiểm tra truy vấn của bạn để tìm lỗi cú pháp. Bạn cũng có thể muốn DBMS_OUTPUT.PUT_LINE thông số của bạn i.CUSTOMER_REF_IDi.CUSTOMER_ID để kiểm tra giá trị của chúng.




  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 - Làm cách nào để lấy kích thước thực của ROW cụ thể?

  2. khóa người dùng đã đăng nhập oracle bằng java

  3. Truy vấn ràng buộc Oracle sau giá trị của search_condition

  4. Oracle JDBC DriverManager.getConnection () bị treo

  5. Làm thế nào để chuyển đổi SDO_GEOMTRY trong GeoJSON