powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Получить BLOB из Хранимой процедуры ORACLE
3 сообщений из 3, страница 1 из 1
Получить BLOB из Хранимой процедуры ORACLE
    #40075885
Roman35
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ХП на базе оракла которая по запросу формирует 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
Получить BLOB из Хранимой процедуры ORACLE
    #40075906
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman35Каким образом мне получить данные из хранимой процедуры?

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

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

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


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