當表名與列名在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,這樣通過一個固定的中間表完成了此項工作