我正在将Table1中的20000多行插入到Table2中。我收到错误消息不一致数据类型,我想将BF保持为BFile。如何在没有不一致的数据类型错误的情况下做到这一点?
下面是我的代码。
declare
CURSOR c1
IS
SELECT name, id, address, BF
FROM table1 a
begin
for i in 1..20000 loop
for l_record in c1 loop
insert into Table2 (name, id, address, BF)
values (''' ||name||''', '|| id||', '''|| BF ||');
end loop;
end loop;
end;
/
答案 0 :(得分:0)
摘自文档:
您使用BFILE数据类型在操作中存储大型二进制对象 数据库外部的系统文件。每个BFILE变量都存储一个文件 定位器,它指向服务器上的大型二进制文件。的 定位器包含目录别名,该目录别名指定完整路径名。
您没有说table1.bf
栏中写的内容,所以我想它是那个二进制对象(例如图片)的名称。如果是这样,为什么需要循环和游标?简单的INSERT
应该可以做到。此外,似乎您迷失了所有那些用单引号引起来的引号(我确实如此)。
无论如何:这是一个例子。正如您提到的,我正在创建两个表。其中一个包含一行,随后的INSERT
将其插入到另一个表中。 ROWNUM < 20000
在此处将插入限制为20000行。我认为您的table1
表中还有更多这些内容。
首先,以SYS
连接,我将创建一个目录(稍后在insert into table2
期间将需要它):
SQL> show user
USER is "SYS"
SQL> create directory my_dir as 'c:\temp';
Directory created.
SQL> grant read, write on directory my_dir to scott;
Grant succeeded.
以scott
身份连接并执行操作。插入使用BFILENAME函数
返回与服务器文件系统上的物理LOB二进制文件关联的BFILE定位器。
它接受两个参数:
SQL> connect scott/tiger@xe
Connected.
SQL> create table table1 (bf varchar2(255), name varchar2(10), id number);
Table created.
SQL> create table table2 (bf bfile, name varchar2(100), id number);
Table created.
SQL> insert into table1 values ('littlefoot.jpg', 'lf', 1);
1 row created.
SQL>
SQL> insert into table2 (bf, name, id)
2 select bfilename('EXT_DIR', bf), name, id from table1
3 where rownum < 20000;
1 row created.
SQL> select * From table2;
BF NAME ID
-------------------------------------------------- ---------- -----
bfilename('EXT_DIR', 'littlefoot.jpg') lf 1
SQL>