星期三, 1月 03, 2007

Oracle: 如何在 SQL 敘述中使用包含 & 字元的字串常數

ref: http://www.cine.idv.tw/Learning/ComputerScience/Database/oracle/AppNotes/appnote-59824f555728-sql-65588ff04e2d4f7f75285305542b-5b57514376845b574e325e386578/



shortie 發現 TOAD 的 SQL Editor ,會把 '&' 字元後的字串,當成變數名稱,造成無法直接將欄位之值,更新為包含 '&' 字元的字串...



問題描述


INSERT INTO DTBDRG (
DRG_CODE, DRG_NHI_CODE, DRG_NAME, DRG_JD_FLAG,
DRG_SPEC, DRG_UNIT, DRG_CHARACTER, DRG_TEST_FLAG, DRG_BRAND)
VALUES (
'1CL100', 'A042448100', 'CLOPINE 100mg (Clozapine) ', ' ',
'100mg ', 'Tab ', ' ', ' ', '瑞士[1.2.2.1&~2]');

在 TOAD 中無法執行。


解決方案


這嚴格說起來並不能算是 PL/SQL 問題,而是 TOAD 的 SQL Editor 模仿 SQL *PLUS 的行為,所導致的結果。
我們只要如 http://www.jlcomp.demon.co.uk/faq/litampersand.html 中所述般地,將字串拆成兩段,把 '&' 字元放在第一段的最後一個位置即可。


也就是把上段 SQL ,做如下之修改即可完成更新的動作:


INSERT INTO DTBDRG (
DRG_CODE, DRG_NHI_CODE, DRG_NAME, DRG_JD_FLAG,
DRG_SPEC, DRG_UNIT, DRG_CHARACTER, DRG_TEST_FLAG, DRG_BRAND)
VALUES (
'1CL100', 'A042448100', 'CLOPINE 100mg (Clozapine) ', ' ',
'100mg ', 'Tab ', ' ', ' ', '瑞士[1.2.2.1&' || '~2]');

這個問題在下面兩本書中,也可以找到相關說明:


1. Oracle PL/SQL Programming, Fourth Edition


2. Oracle SQL*Plus: The Definitive Guide, 2nd Edition