ORA-00997:非法使用长数据类型
我在Oracle中在两个数据库Ora1 & Ora2之间创建了一个dblink。
在Ora1中的表tab2具有长数据类型的列,因此,在ora2中创建表tab2时,可以使用以下sybntax:
create table Ora2.tab2 as select tab1 from Ora1.tab1@dblink_nm; 给出"ORA-00997:非法使用长数据类型“的错误。
因此,我尝试将tab1转换为LOB。使用以下语法:
create table Ora2.tab2 as select TO_LOB(tab1) from Ora1.tab1@dblink_nm; 但我仍然面临着同样的问题"ORA-00997:非法使用长数据类型“。
是否有处理数据和创建表的替代方案?
发布于 2017-07-02 16:45:23
总是有一种方法可以在数据库链接上移动数据,但是有些数据类型需要多个步骤。
一种选择是在远程数据库上执行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;
/https://stackoverflow.com/questions/44849229
复制相似问题