在 Oracle 中插入含 & 字元的字串時,若未關閉替換變數功能,會被視為變數提示導致失敗或錯誤資料。本文針對兩大常用工具給出最簡單解法。
INSERT INTO t (col) VALUES ('A&B'); -- 若 SET DEFINE ON,會提示輸入 B 變數值
使用雙 && 定義「永久替換變數」,首次執行會提示輸入,之後同 Session 直接使用該值。若不想提示,先關閉替換:
SET DEFINE OFF
INSERT INTO t (col) VALUES ('A&B');
SET DEFINE ON
或在字串中寫 'A&&B'(若已定義變數 B 則代入,否則提示)。
不支援 SET DEFINE,最穩妥用 CHR(38) 串聯:
INSERT INTO t (col) VALUES ('A' || CHR(38) || 'B');
-- CHR(38) = '&'
適用於任何工具、任何語境(PL/SQL 區塊、匯入腳本、動態 SQL)。
SET DEFINE OFF(SQL*Plus 相容工具)。CHR(38) 或 '&' ESCAPE 明確表達字面 &。:b1)完全避免字串拼接問題。| 字元 | ASCII | CHR() |
|---|---|---|
| & | 38 | CHR(38) |
| ' | 39 | CHR(39) 或 '' (雙單引號) |
| % | 37 | CHR(37) |
| _ | 95 | CHR(95) |