当表名与列名在SQL执行之前都是未知的时候,我仍然象平时一样用动态的SQL去操作,结果却总是报错,原来PB中不支持动态的selectblob这样的语句。后来····中间过程就不说了,既浪费自己时间也浪费大家时间。
找到了一个笨办法,原理是:在表与表之间交换数据,不管是什么类型都不需要使用selectblob这样的PB特有语法,直接用SQL就行了。
这里就对selectblob举个例,更新与插入就不讲了,方法类似
1、建立一个中间表,固定表名,如wrblob(int id,blob fblob)
2、先用动态SQL将BLOB读到这个表中,其实是个插入语句:
insert into wrblob(id,fblob) values( id, select fblob from 表名 where 主键 = ?);
记住写入wrblob表中的id一定要是唯一值,不会重复的,可以预先得到这样一个值,本句是可以用EXECUTE IMMEDIATE 动态执行的
3、然后用selectblob fblob into :lb_blob from wrblob where id = ?; 取得需要读取的值
4、收尾工作,需要删除此行数据,delete from wrblob where id =?;
OK,这样通过一个固定的中间表完成了此项工作