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データ型は使用できません。
http://pub.ne.jp/tb.php/2429608