PB中动态SQL处理BLOB的方式
16lz
2021-01-22
当表名与列名在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一定要是唯一值,不会重复的,可以预先得到这样一个值,本句是可以用EXECUTEIMMEDIATE动态执行的
3、然后用selectblob fblob into :lb_blob from wrblob where id = ?; 取得需要读取的值
4、收尾工作,需要删除此行数据,delete from wrblob where id =?;
OK,这样通过一个固定的中间表完成了此项工作
更多相关文章
- 利用JAVA动态编译重构系统
- 每条sql语句实际上都是一个事物(事物多种类型解读)
- sql 语句 更改默认的sql server 数据库
- 怎么用SQL语句实现表中的一个字段加1啊??
- PHP获取MySQL执行sql语句的查询时间
- 删除2行1 Sql语句mysql
- 使用IN语句缓慢mysql删除查询
- 1.4.6 收集sql语句的执行计划 2
- 在SQL SELECT语句中重用别名字段