首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

Oracle 存儲過程動態 SQL 中日期字面量引號嵌套錯誤修正

     編輯:程式設計疑難解答

問題

動態 SQL 字符串中調用 to_date 時單引號嵌套錯誤導致報錯。

錯誤示例

v_sql := 'INSERT INTO t VALUES (to_date('2023-01-01','yyyy-mm-dd'))'; -- 錯誤:單引號衝突

修正方法

  1. 雙重單引號轉義:
    v_sql := 'INSERT INTO t VALUES (to_date(''2023-01-01'',''yyyy-mm-dd''))';
  2. 使用參數綁定 (推薦)**:
    v_sql := 'INSERT INTO t VALUES (to_date(:dt,''yyyy-mm-dd''))';
    EXECUTE IMMEDIATE v_sql USING v_date; -- v_date 為 DATE 類型變量
  3. q'[]' 引用符 (Oracle 10g+)**:
    v_sql := q'[INSERT INTO t VALUES (to_date('2023-01-01','yyyy-mm-dd'))]';

最佳實踐

優先使用 **參數綁定**,避免 SQL 注入、提高性能、簡化引號處理。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved