如果我在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
答案 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_pic
或thumb
进行测试,而不是两者都测试。