ORA-00997:非法使用LONG数据类型
我在Oracle中在两个数据库Ora1&之间创建了一个dblink。 Ora2。
Ora1中的表tab1具有LONG数据类型的列,因此在ora2中使用以下sybntax创建表tab2时:
create table Ora2.tab2 as select tab1 from Ora1.tab1@dblink_nm;
给出错误“ORA-00997:非法使用LONG数据类型”
所以我尝试将tab1转换为LOB。语法如下:
create table Ora2.tab2 as select TO_LOB(tab1) from Ora1.tab1@dblink_nm;
但我仍面临同样的问题“ORA-00997:非法使用LONG数据类型”。
是否有替代方法来处理数据并创建表格?
答案 0 :(得分:0)
总是可以通过数据库链接移动数据,但某些数据类型需要多个步骤。
一个选项是在远程数据库上执行LONG到LOB转换,复制转换后的数据,然后清理中间表:
begin
dbms_utility.exec_ddl_statement@dblink_nm('create table temp_lob_results as select to_lob(a) a from tab1');
execute immediate 'create table tab2 as select * from temp_lob_results@dblink_nm';
dbms_utility.exec_ddl_statement@dblink_nm('drop table temp_lob_results');
end;
/
另一种选择是使用PL / SQL,它可以隐式地将LONG转换为LOB。 (通常使用这样的PL / SQL是一个可怕的想法,因为它太慢了 比单个SQL语句更复杂。)
--create table tab2(...);
begin
for tab1_rows in
(
select * from tab1@dblink_nm
) loop
insert into tab2 values(tab1_rows.a);
end loop;
end;
/