#在表空间之间移动包含long列的表
#在包含long列的表中,不能使用ctas进行直接移动表空间。此时,可以使用sqlplus的copy命令。
SQL> create table new_table (a int,b long);
表已创建。
SQL> select * from new_table;
未选定行
SQL> select * from test_copy_long;
A B
---------- ---------------------------------------------------------------------
-----------
1 abcd
1 abd
1 abcd
1 abd
SQL> copy from to inse
rt new_table using select * from test_copy_long;
数组提取/绑定大小为 15。(数组大小为 15)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 80。(long 为 80)
4 行选自 。
4 行已插入 NEW_TABLE。
4 行已提交至 NEW_TABLE (位于 )。
SQL> desc test_copy_long;
名称 是否为空? 类型
----------------------------------------------------- -------- ----------------
--------------------
A NUMBER(38)
B LONG
SQL> select * from new_table;
A B
---------- ---------------------------------------------------------------------
-----------
1 abcd
1 abd
1 abcd
1 abd
#关于long列长度问题,sqlplus命令set long n用来设置加载到目标long列的长度,超出长度的列会被截断,但不会报错。
SQL> set long 10
SQL> insert into test_copy_long values (3,'abcdefghijklmnopq');
已创建 1 行。
SQL> commit;
提交完成。
SQL> copy from to inse
rt new_table using select * from test_copy_long;
数组提取/绑定大小为 15。(数组大小为 15)
将在完成时提交。(提交的副本为 0)
最大 long 大小为 10。(long 为 10)
5 行选自 。
5 行已插入 NEW_TABLE。
5 行已提交至 NEW_TABLE (位于 )。
SQL> select * from new_table;
A B
---------- ----------
1 abcd
1 abd
1 abcd
1 abd
1 abcd
1 abd
1 abcd
1 abd
3 abcdefghij
已选择9行。
SQL> alter table new_table rename to old_table;
表已更改。
阅读(668) | 评论(0) | 转发(0) |