PB中动态SQL处理BLOB的方式

当表名与列名在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,这样通过一个固定的中间表完成了此项工作

你可能感兴趣的:(sql,工作,delete,insert)