我在oracle中使用powerbuilder ole控件以blob格式保存了数据。
现在我们要将这些blob转换为文件,文件有不同的格式(PDF、JPG、EXCEL、TEXT、DOC)
有超过100万个文件,因此使用olecontrol手动打开和保存并不容易。
我们可以通过脚本自动将blob保存到powerbuilder 中的文件中吗
是的,有可能:
-
在PowerBuilder嵌入式SQL中编写一个游标,为blob表中的每条记录获取键和文件扩展名(如果有)。这种东西的语法看起来是这样的:
Long ll_Key String ls_Ext DECLARE GetBlobCursor CURSOR FOR SELECT blob_key, blob_extension FROM blob_table ; /* need to loop here while SQLCA.SQLCode is good */ FETCH GetBlobCursor INTO :ll_Key, :ls_Ext ;
-
使用SELECTBLOB嵌入式SQL语句将blob数据获取到PowerBuilder blob变量中:
Blob lblob_File SELECTBLOB fileblob INTO :lblob_File FROM blobtable WHERE blob_key = :ll_Key ;
-
使用FileOpen和FileWrite写入具有有效文件名和扩展名的blob:
Long ll_Loops, ll_Step Int li_File String ls_Path ls_Path = "<where do you want me?>." + String(ll_Key) + "." + ls_Ext li_File = FileOpen(ls_Path, StreamMode!, Write!, LockWrite!, Append!) If li_File > 0 Then // Determine how many times to call FileWrite ll_FileLen = Len(lblob_File) If ll_FileLen > 32765 Then If Mod(ll_FileLen, 32765) = 0 Then ll_Loops = ll_FileLen/32765 Else ll_Loops = (ll_FileLen/32765) + 1 End If Else ll_Loops = 1 End If For ll_Step = 1 To ll_Loops FileWrite(li_File,BlobMid(lblob_File,((ll_Step - 1)*32765) + 1, 32765)) Next Else //log the error, or handle End If FileClose(li_File)
希望这能让你开始。