我使用oracle中的powerbuilder ole控件以blob格式保存数据。
现在我们要将这些blob转换为文件, 文件格式不同(PDF,JPG,EXCEL,TEXT,DOC)
有超过1百万个文件,因此使用olecontrol手动打开和保存并不容易。
我们可以通过脚本自动保存blob到powerbuilder中的文件来实现吗
答案 0 :(得分:1)
是的,有可能:
在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)
希望能让你开始。