首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ORA-00997:使用select语句创建表时非法使用长数据类型

ORA-00997:使用select语句创建表时非法使用长数据类型
EN

Stack Overflow用户
提问于 2017-06-30 14:48:45
回答 1查看 5.9K关注 0票数 0

ORA-00997:非法使用长数据类型

我在Oracle中在两个数据库Ora1 & Ora2之间创建了一个dblink。

在Ora1中的表tab2具有长数据类型的列,因此,在ora2中创建表tab2时,可以使用以下sybntax:

代码语言:javascript
复制
create table Ora2.tab2 as select tab1 from Ora1.tab1@dblink_nm; 

给出"ORA-00997:非法使用长数据类型“的错误。

因此,我尝试将tab1转换为LOB。使用以下语法:

代码语言:javascript
复制
create table Ora2.tab2 as select TO_LOB(tab1) from Ora1.tab1@dblink_nm; 

但我仍然面临着同样的问题"ORA-00997:非法使用长数据类型“。

是否有处理数据和创建表的替代方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-02 16:45:23

总是有一种方法可以在数据库链接上移动数据,但是有些数据类型需要多个步骤。

一种选择是在远程数据库上执行LOB转换,复制转换后的数据,然后清理中间表:

代码语言:javascript
复制
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语句慢得多,复杂得多。)

代码语言:javascript
复制
--create table tab2(...);

begin
    for tab1_rows in
    (
        select * from tab1@dblink_nm
    ) loop
        insert into tab2 values(tab1_rows.a);
    end loop;
end;
/
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44849229

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档