frog.raindrop.jp.knowledge > Oracle

April 19, 2007

UNICODEの列と文字列リテラルとUNIONするSQL

NCHARやNVARCHAR2の列と文字列リテラルを返す列をUNIONするようなばあい、そのままではエラーになります。

SQL> DESC Table1;
名前             NULL?    型
---------------- -------- ---------------------------
COLUMN1                   NCHAR(10)
COLUMN2                   NVARCHAR2(30)

SQL> SELECT COLUMN1, COLUMN2
  2  FROM Table1
  3  UNION
  4  SELECT 'あああああ' AS COLUMN1,
  5  'いいいいい' AS COLUMN2
  6  FROM DUAL;
SELECT COLUMN1, COLUMN2
       *
行1でエラーが発生しました。:
ORA-12704: character set mismatch

文字列リテラルは、前に'N'をつけてやると、UNICODEとして記述できますので、同じケースなら以下のようにすると、うまくいきます。

SQL> SELECT COLUMN1, COLUMN2
  2  FROM Table1
  3  UNION
  4  SELECT N'あああああ' AS COLUMN1,
  5  N'いいいいい' AS COLUMN2
  6  FROM DUAL;

COLUMN1    COLUMN2
---------- ----------
えええええ くくくくく
あああああ いいいいい