[Oracle] NVARCHAR2型の属性を含むオブジェクト型でORA-12714エラーが発生 | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

NVARCHAR2型の属性を含むオブジェクト型のネストした表を定義し、TABLE演算子と CAST演算子を使って SQL内で参照したところ、

CREATE TYPE object_type IS OBJECT (
	col1	NVARCHAR2(100),
	col2	NUMBER(10)
)
/

CREATE TYPE object_table_type IS TABLE OF object_type
/

DECLARE
  object_table  object_table_type;
  CURSOR cur IS
    SELECT *
      FROM TABLE(CAST(object_table AS object_table_type));
  wk_rec  cur%ROWTYPE;
BEGIN
  object_table := object_table_type(
                    object_type('A',1),
                    object_type('B',2),
                    object_type('C',3),
                    object_type('D',4),
                    object_type('E',5)
                  );
  OPEN cur;
  LOOP
    FETCH cur INTO wk_rec;
    EXIT WHEN cur%NOTFOUND;
    DBMS_OUTPUT.PUT_LINE(wk_rec.col1 || ',' || wk_rec.col2);
  END LOOP;
  CLOSE cur;
END;
/

以下のようなエラーが発生しました。

ORA-12714: 無効な各国語キャラクタ・セットが指定されました

NVARCHAR2型の属性を TO_CHAR しても変わりません。

しかし、SQLでなく、添字で参照した場合はエラーにはなりません。

DECLARE
  object_table  object_table_type;
BEGIN
  object_table := object_table_type(
                    object_type('A',1),
                    object_type('B',2),
                    object_type('C',3),
                    object_type('D',4),
                    object_type('E',5)
                  );
  FOR i IN 1..object_table.COUNT LOOP
    DBMS_OUTPUT.PUT_LINE(object_table(i).col1 || ',' || object_table(i).col2);
  END LOOP;
END;
/

うーん...バグですかね。