2009.9.19

LONGのALTER TABLE [テーブル名] MOVEはできません

新規のシステム開発では、LONG型の項目を使用することはほとんど無いと思います。

LONG型はいろいろと制約があるため、使用することは推奨されていません。
代わりにLOB(BLOB,CLOB)が推奨されています。

テーブルを格納する表領域を変更するにはmove文などを使用しますが、LONG型
を含むテーブルはエラーになるので確認してみます。



SQL> create table long_test (
2 COLUMN1 CHAR(5),
3 COLUMN2 LONG RAW
4 );

表が作成されました。

SQL> insert into long_test
2 select '00001',UTL_I18N.STRING_TO_RAW ('AAABBBCCCDDDEEE', 'AL32UTF8') from dual;

1行が作成されました。

SQL> commit;

コミットが完了しました。

SQL> alter table long_test move;
alter table long_test move
*
行1でエラーが発生しました。:
ORA-00997: LONGデータ型は使用できません。

※create ~ selectもダメ、insert ~ selectもダメ
SQL> create table long_test2 as select * from long_test;
create table long_test2 as select * from long_test
*
行1でエラーが発生しました。:
ORA-00997: LONGデータ型は使用できません。

SQL> create table long_test2 (
2 COLUMN1 CHAR(5),
3 COLUMN2 LONG RAW
4 );

表が作成されました。

SQL> insert into long_test2 select * from long_test;
insert into long_test2 select * from long_test
*
行1でエラーが発生しました。:
ORA-00997: LONGデータ型は使用できません。

SQL> exit

exp/impを使用してみます。



※SYSユーザでexp,impを使うときはSYSDBAで接続しないとエラーになってしまうので、シングルコーテーションで以下のように囲む必要があります。

D:\temp>exp USERID='/ AS SYSDBA' FILE=long.dmp TABLES=SYS.LONG_TEST

Export: Release 10.2.0.1.0 - Production on 土 9月 19 21:37:16 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

接続先: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
JA16SJISTILDEキャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでエクスポートを実行します
サーバーではAL32UTF8キャラクタ・セットを使用します(キャラクタ・セットの変換可能)

指定された表をエクスポートします... 従来型パス経由...
.. 表 LONG_TESTをエクスポート中 1行エクスポートされました。
エクスポートは警告なしで正常終了しました。

D:\temp>sqlplus / as sysdba

SQL> truncate table long_test;

表が切り捨てられました。

SQL> exit

D:\temp>imp USERID='/ AS SYSDBA' FILE=long.dmp TABLES=LONG_TEST IGNORE=Y

Import: Release 10.2.0.1.0 - Production on 土 9月 19 21:39:23 2009

Copyright (c) 1982, 2005, Oracle. All rights reserved.

接続先: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production

エクスポート・ファイルはEXPORT:V10.02.01によって従来型パス経由で作成されました
JA16SJISTILDEキャラクタ・セットおよびAL16UTF16 NCHARキャラクタ・セットでインポートを実行します
インポート・サーバーではAL32UTF8キャラクタ・セットを使用します(キャラクタ・セットの変換可能)。
. SYSのオブジェクトをSYSにインポートしています
. SYSのオブジェクトをSYSにインポートしています
. . 表 "LONG_TEST"をインポートしています 1行インポートされました。
インポートは警告なしで正常終了しました。

LONG型の項目でソートなどもエラーになってしまいます。


SQL> select * from long_test order by column2;
select * from long_test order by column2
*
行1でエラーが発生しました。:
ORA-00997: LONGデータ型は使用できません。






Trackback:

このエントリーのトラックバックURL:
http://pub.ne.jp/tb.php/2429608