在Oracle中,如何将一张表中的long字段的数据插入到另一张表中的clob的字段中

时间:2021-12-30 20:52:31
在Oracle中,如何将一张表中的long字段的数据插入到另一张表中的clob的字段中 

17 个解决方案

#1




insert into table_clob select to_lob(long_col)... from table_long;
注意to_lob函数只能用在select语句中,所以你的设法构造成select语句。


引用楼主 linoxu 的帖子:
在Oracle中,如何将一张表中的long字段的数据插入到另一张表中的clob的字段中 

#2


执行存储过程的时候报错: 
ORA-00997: 非法使用 LONG 数据类型 
ORA-06512: 在 "HN1W.PRO_INTOCONTENT", line 7 
ORA-06512: 在 line 3 

View program sources of error stack?

存储过程如下: 
create or replace procedure Pro_intoContent is 

begin 

  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELECT hn_content.nextval, 
          ISSUEDATE, 
          DIRECTORY, 
          MSGTITLE,            
          TO_LOB(MSGCONTENT)    --long类型      
    FROM CSMESSAGE@hnold;  --dblink 

end Pro_intoContent; 

#3


  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELECT hn_content.nextval, 
          ISSUEDATE, 
          DIRECTORY, 
          MSGTITLE,            
          TO_LOB(MSGCONTENT)    --long类型      
    FROM CSMESSAGE@hnold;  --dblink 


看一下这个语句是否能运行通过,如果可以写在存储过程也是OK的啦!


ORA-00997 illegal use of LONG datatype

Cause: A value of datatype LONG was used in a function or in a DISTINCT, WHERE, CONNECT BY, GROUP BY, or ORDER BY clause. A LONG value can only be used in a SELECT clause.

Action: Remove the LONG value from the function or clause.

#4


也是不行
还是报同样的错误。


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

#5


dblink 不能使用to_lob

引用 2 楼 linoxu 的回复:
执行存储过程的时候报错: 
ORA-00997: 非法使用 LONG 数据类型 
ORA-06512: 在 "HN1W.PRO_INTOCONTENT", line 7 
ORA-06512: 在 line 3 

View program sources of error stack? 

存储过程如下: 
create or replace procedure Pro_intoContent is 

begin 

  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELEC…

#6


dblink 不能使用to_lob -----这个问题怎么解决

还有没有其他办法。

#7


把表改为同义词,不用dblink?

#8


把表改为同义词----是什么意思

#9


改成同义词,还是不行。
ORA-00997: 非法使用 LONG 数据类型 

#10


那先转到临时表,看看在插入行不行?

#11


http://www.cnblogs.com/songsh96/archive/2007/09/05/882587.html
文章是提出质疑的,没有解决LZ的问题。
介于不能是用link,是否考虑导出,导入后,在使用to_lob。

#12


引用 10 楼 cosio 的回复:
那先转到临时表,看看在插入行不行? 


远程数据库我是没有权限进行操作的。

#13


在本机建一临时表

create table tmp
(
       t01   INT
       ,t02  nvarchar2(2000)
)

然后
insert into tmp select id,to_lob(long字段) from 表

接着在用临时表转过去
看看行不行?

#14


引用 13 楼 cosio 的回复:
在本机建一临时表 

create table tmp 

      t01  INT 
      ,t02  nvarchar2(2000) 


然后 
insert into tmp select id,to_lob(long字段) from 表 

接着在用临时表转过去 
看看行不行?


在本机用to_lob是可以的,但是我是要在远程的数据库获取long中的数据。

#15


远程数据库你没有操作权限?

#16


远程数据库我只有只读权限,无法进行操作。。。

#17


引用 14 楼 linoxu 的回复:
引用 13 楼 cosio 的回复:

在本机建一临时表 

create table tmp 

      t01  INT 
      ,t02  nvarchar2(2000) 


然后 
insert into tmp select id,to_lob(long字段) from 表 

接着在用临时表转过去 
看看行不行? 


在本机用to_lob是可以的,但是我是要在远程的数据库获取long中的数据。

远程表中的数据读过来插入自己的临时表,然后再转了。

#1




insert into table_clob select to_lob(long_col)... from table_long;
注意to_lob函数只能用在select语句中,所以你的设法构造成select语句。


引用楼主 linoxu 的帖子:
在Oracle中,如何将一张表中的long字段的数据插入到另一张表中的clob的字段中 

#2


执行存储过程的时候报错: 
ORA-00997: 非法使用 LONG 数据类型 
ORA-06512: 在 "HN1W.PRO_INTOCONTENT", line 7 
ORA-06512: 在 line 3 

View program sources of error stack?

存储过程如下: 
create or replace procedure Pro_intoContent is 

begin 

  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELECT hn_content.nextval, 
          ISSUEDATE, 
          DIRECTORY, 
          MSGTITLE,            
          TO_LOB(MSGCONTENT)    --long类型      
    FROM CSMESSAGE@hnold;  --dblink 

end Pro_intoContent; 

#3


  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELECT hn_content.nextval, 
          ISSUEDATE, 
          DIRECTORY, 
          MSGTITLE,            
          TO_LOB(MSGCONTENT)    --long类型      
    FROM CSMESSAGE@hnold;  --dblink 


看一下这个语句是否能运行通过,如果可以写在存储过程也是OK的啦!


ORA-00997 illegal use of LONG datatype

Cause: A value of datatype LONG was used in a function or in a DISTINCT, WHERE, CONNECT BY, GROUP BY, or ORDER BY clause. A LONG value can only be used in a SELECT clause.

Action: Remove the LONG value from the function or clause.

#4


也是不行
还是报同样的错误。


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

#5


dblink 不能使用to_lob

引用 2 楼 linoxu 的回复:
执行存储过程的时候报错: 
ORA-00997: 非法使用 LONG 数据类型 
ORA-06512: 在 "HN1W.PRO_INTOCONTENT", line 7 
ORA-06512: 在 line 3 

View program sources of error stack? 

存储过程如下: 
create or replace procedure Pro_intoContent is 

begin 

  insert into tf_content 
    (CONTENT_ID, 
    CREATE_TIME, 
    MOOD_ICON, 
    TITLE, 
    CONTENT        --clob类型 
    ) 
    SELEC…

#6


dblink 不能使用to_lob -----这个问题怎么解决

还有没有其他办法。

#7


把表改为同义词,不用dblink?

#8


把表改为同义词----是什么意思

#9


改成同义词,还是不行。
ORA-00997: 非法使用 LONG 数据类型 

#10


那先转到临时表,看看在插入行不行?

#11


http://www.cnblogs.com/songsh96/archive/2007/09/05/882587.html
文章是提出质疑的,没有解决LZ的问题。
介于不能是用link,是否考虑导出,导入后,在使用to_lob。

#12


引用 10 楼 cosio 的回复:
那先转到临时表,看看在插入行不行? 


远程数据库我是没有权限进行操作的。

#13


在本机建一临时表

create table tmp
(
       t01   INT
       ,t02  nvarchar2(2000)
)

然后
insert into tmp select id,to_lob(long字段) from 表

接着在用临时表转过去
看看行不行?

#14


引用 13 楼 cosio 的回复:
在本机建一临时表 

create table tmp 

      t01  INT 
      ,t02  nvarchar2(2000) 


然后 
insert into tmp select id,to_lob(long字段) from 表 

接着在用临时表转过去 
看看行不行?


在本机用to_lob是可以的,但是我是要在远程的数据库获取long中的数据。

#15


远程数据库你没有操作权限?

#16


远程数据库我只有只读权限,无法进行操作。。。

#17


引用 14 楼 linoxu 的回复:
引用 13 楼 cosio 的回复:

在本机建一临时表 

create table tmp 

      t01  INT 
      ,t02  nvarchar2(2000) 


然后 
insert into tmp select id,to_lob(long字段) from 表 

接着在用临时表转过去 
看看行不行? 


在本机用to_lob是可以的,但是我是要在远程的数据库获取long中的数据。

远程表中的数据读过来插入自己的临时表,然后再转了。