多國語言支援常需處理重音字元 (如 à, é, ô, ñ, ü)。Oracle 9i 引入 COMPOSE 與 UNISTR 兩大函數,以 Unicode 標準方式組合基底字元與重音符號。
COMPOSE('a' || UNISTR('\0300')) → à (U+00E0)。\XXXX 十六進位碼點轉換為 Unicode 字元。UNISTR('a\0300') → 字串 a + 重音符 (U+0300)。| 碼點 | 名稱 | 符號 | 範例 |
|---|---|---|---|
| U+0300 | Grave Accent | ` | à (a + 0300) |
| U+0301 | Acute Accent | ´ | é (e + 0301) |
| U+0302 | Circumflex | ^ | ô (o + 0302) |
| U+0303 | Tilde | ~ | ñ (n + 0303) |
| U+0308 | Diaeresis/Umlaut | ¨ | ü (u + 0308) |
-- 1. 直接組合
SELECT COMPOSE('a' || UNISTR('\0300')) FROM DUAL; -- à
-- 2. 使用 UNISTR 完整字串
SELECT COMPOSE(UNISTR('a\0300')) FROM DUAL; -- à
-- 3. 建立法文城市名
SELECT COMPOSE(UNISTR('Caf\00E9')) FROM DUAL; -- Café (直接用預組合碼點 U+00E9)
SELECT COMPOSE(UNISTR('Caf\0065\0301')) FROM DUAL;-- Café (e + acute)
-- 4. 查詢時正規化比對 (避免預組合 vs 分解碼點不匹配)
SELECT * FROM cities
WHERE COMPOSE(city_name) = COMPOSE(UNISTR('Caf\0065\0301'));
善用 COMPOSE + UNISTR,讓 Oracle 成為多語言字元處理的強大引擎。