Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить BLOB из Хранимой процедуры ORACLE / 3 сообщений из 3, страница 1 из 1
06.06.2021, 03:19
    #40075885
Roman35
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить BLOB из Хранимой процедуры ORACLE
Есть ХП на базе оракла которая по запросу формирует XML и выдает его в качестве выходного параметра
Код: plsql
1.
2.
3.
4.
5.
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>

Вызываю процедуру
Код: pascal
1.
2.
3.
4.
5.
 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 данные не передаются.
Каким образом мне получить данные из хранимой процедуры?
...
Рейтинг: 0 / 0
06.06.2021, 12:40
    #40075906
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить BLOB из Хранимой процедуры ORACLE
Roman35Каким образом мне получить данные из хранимой процедуры?

Найти ошибку в используемой библиотеке доступа и исправить. Или выкинуть её и использовать
OCI напрямую.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
07.06.2021, 01:19
    #40075984
Кроик Семён
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Получить BLOB из Хранимой процедуры ORACLE
Roman35,

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

возможно, с LOB'ами (BLOB или CLOB) в общем случае следует работать через потоки TStream
http://docwiki.embarcadero.com/RADStudio/Sydney/en/Support_for_Blob_Streaming_in_FireDAC
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить BLOB из Хранимой процедуры ORACLE / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]