Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 Получить BLOB из Хранимой процедуры ORACLE  [new]
Roman35
Member

Откуда:
Сообщений: 61
Есть ХП на базе оракла которая по запросу формирует XML и выдает его в качестве выходного параметра
Procedure MakeReceipt1 ( pConvertPfuID IN  developer.wucb_cp_convertpfu.ID%type
                         ,pblob                out blob
                         ,errCode              out number
                         ,errMsg               out varchar2
                                 );


К ней конекчусь через компоненту AnyDAC TADStoredProced

object ADMakeReceipt1: TADStoredProc
Connection = dmDataModule.adcMainConnection
SchemaName = 'CREATOR'
PackageName = 'DEVELOPER.PKG_WUCB_SALARY_PAYMENTS'
StoredProcName = 'MAKERECEIPT1'
Left = 406
Top = 542
ParamData = <
item
Position = 1
Name = 'PCONVERTPFUID'
DataType = ftBCD
ADDataType = dtBCD
Precision = 10
ParamType = ptInput
end
item
Position = 2
Name = 'PBLOB'
DataType = ftOraBlob
ADDataType = dtHBlob
ParamType = ptOutput
end
item
Position = 3
Name = 'ERRCODE'
DataType = ftFMTBcd
ADDataType = dtFmtBCD
Precision = 38
NumericScale = 38
ParamType = ptOutput
Value = '1'
end
item
Position = 4
Name = 'ERRMSG'
DataType = ftString
ADDataType = dtAnsiString
ParamType = ptOutput
Value = ''
end>

Вызываю процедуру
 ADMakeReceipt1.Params.ParamByName('PCONVERTPFUID').Value:=cxGrid1DBTableView1.DataController.Values[cxGrid1DBTableView1.DataController.FocusedRecordIndex,0];
ADMakeReceipt1.ExecProc;
ln:=ADMakeReceipt1.Params.ParamByName('PBLOB').GetDataLength;
str:=ADMakeReceipt1.Params.ParamByName('PBLOB').AsString;
....


Если длина возвращаемого значения PBLOB небольшая все работает отлично, в str я получаю необходимые данные, но если длина PBLOB больше 2К получаю пустую строку ,а GetDataLength возвращает 0.
При этом никакие ошибки не возникают. Если эту же процедуру вызываю из среды оракла все работает как надо.
Перепробовал уже всякие извращения с типом параметров но ничего не выходит, при длинном PBLOB данные не передаются.
Каким образом мне получить данные из хранимой процедуры?
6 июн 21, 03:19    [22331848]     Ответить | Цитировать Сообщить модератору
 Re: Получить BLOB из Хранимой процедуры ORACLE  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 53435

Roman35
Каким образом мне получить данные из хранимой процедуры?

Найти ошибку в используемой библиотеке доступа и исправить. Или выкинуть её и использовать
OCI напрямую.

Posted via ActualForum NNTP Server 1.5

6 июн 21, 12:40    [22331885]     Ответить | Цитировать Сообщить модератору
 Re: Получить BLOB из Хранимой процедуры ORACLE  [new]
Кроик Семён
Member

Откуда: СПб --> Dortmund
Сообщений: 6743
Roman35,

я с AnyDac/FireDac опыта не имел, просто предположу:

возможно, с LOB'ами (BLOB или CLOB) в общем случае следует работать через потоки TStream
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Support_for_Blob_Streaming_in_FireDAC
7 июн 21, 01:19    [22332058]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить