非法使用LONG数据类型00997. 00000 - “非法使用LONG数据类型

时间:2016-06-08 09:36:17

标签: sql oracle oracle11g informix

如果我在informix中有两个具有相同结构的表,而在oracle db中有另一个表,我想将照片从informix迁移到oracle所以我使用oracle网关实现此迁移,但它失败了,我收到以下错误:

  

SQL错误:ORA-00997:非法使用LONG数据类型   00997. 00000 - “非法使用LONG数据类型”

我的查询:

INSERT INTO EMPPHOTO (EMP_NUM,EMP_PIC,THUMB)
SELECT "emp_num","emp_pic","thumb" FROM "empmaster1pics"@GMR;

EMPPHOTO(oracle table)和EMP_PIC --->BLOB

empmaster1pics(informix表)和emp_pic --->Byte

1 个答案:

答案 0 :(得分:1)

您正在从Informix数据类型到Oracle数据类型中执行隐式conversion。但是you can't use to_lob() with a remote table,这是明确的等价物。

您应该能够使用PL / SQL游标实现此目的,将查询和插入分开:

begin
  for rec in (
    select "emp_num", "emp_pic", "thumb"
    from "empmaster1pics"@GMR
  )
  loop
    insert into empphoto (emp_num, emp_pic, thumb)
    values (rec."emp_num", rec."emp_pic", rec."thumb");
  end loop;
end;
/

我没有要验证的Informix数据库,但它可以使用指向Oracle数据库的链接以及包含long raw列的表,该列最接近您的byte列,与您的原始代码获得相同的ORA-00997。 (除非您在表格中只能有一个long raw列,因此我只能使用emp_picthumb进行测试,而不是两者都测试。