powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
6 сообщений из 6, страница 1 из 1
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39268806
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

IBE 2016.6.22.1

Пишем на Delphi UDF:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
library BlobLib;

type
  TISC_BlobGetSegment = function( BlobHandle : pointer; Buffer : pAnsiChar; BufferSize : word; var ResultSize : word ) : integer; cdecl;
  TISC_BlobPutSegment = procedure( BlobHandle : pointer; Buffer : pAnsiChar; BufferSize : integer ); cdecl;

  TBlob = packed record
            GetSegment     : TISC_BlobGetSegment;
            BlobHandle     : pointer;
            SegmentCount   : integer;
            MaxSegmentSize : integer;
            TotalSize      : integer;
            PutSegment     : TISC_BlobPutSegment;
          end;

function BlobFunc( var Blob: TBlob ) : integer; cdecl; export;
begin
  Result := 1;
end;

exports
  BlobFunc;

end.



Регистрируем в БД UDF и создаем таблицу и процедуру:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
declare external function BLOB_FUNC
    blob
returns integer by value
entry_point 'BlobFunc' module_name 'BlobLib.dll';

create table BLOB_DATA (
    ID   integer,
    DAT  blob sub_type 0 segment size 80
);

insert into BLOB_DATA ( ID, DAT ) values( 1, 'BLOB TEXT' );
commit;

SET TERM ^ ;

create or alter procedure BLOB_PROC
as
  declare variable B blob;
  declare variable I integer;
begin
  select DAT
    from BLOB_DATA
   where ID = 1
    into :B;
  I = BLOB_FUNC( :B );
end ^

set term ; ^



Входим в режим отладки процедуры и при пошаговом режиме по F8 на строчке I = BLOB_FUNC( :B ); получаем ошибку:
Код: powershell
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Error Message:
----------------------------------------
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
feature is not supported.
BLOB and array data types are not supported for conversion operation.


[0053E3E7] FIB.IBError (Line 539, "FIB.pas" + 55) + $2
[00527353] FIBQuery.TFIBQuery.Next (Line 3134, "FIBQuery.pas" + 23) + $C
[00D9BF6F] DebugSP_New.TfrmDebugSP_new.ExecuteStatement (Line 1523, "DebugSP_New.pas" + 13) + $5



С уважением, Polesov.
...
Рейтинг: 0 / 0
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39269379
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А какой селект выполняет отладчик на этой строке?
...
Рейтинг: 0 / 0
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39270162
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertА какой селект выполняет отладчик на этой строке?
В этой строке переменной I присваивается результат UDF BLOB_FUNC, в которую переменная B типа BLOB передается в качестве параметра.
...
Рейтинг: 0 / 0
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39270346
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, если в качестве значения параметра в UDF передавать NULL, то в отладчике ошибки не возникает.

Причем, NULL может быть передан как явно
Код: plsql
1.
  I = BLOB_FUNC( null );



так и неявно
Код: plsql
1.
2.
  B = null;
  I = BLOB_FUNC( :B );
...
Рейтинг: 0 / 0
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39271012
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PolesovIBExpertА какой селект выполняет отладчик на этой строке?
В этой строке переменной I присваивается результат UDF BLOB_FUNC, в которую переменная B типа BLOB передается в качестве параметра.

Отладчик в этом месте соответствующий селект выполнят. Текст этого селекта можно посмотреть в отладчике на соответствующей закладке.
...
Рейтинг: 0 / 0
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
    #39271033
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert, извиняюсь - тормознул

Код: plsql
1.
SELECT cast(BLOB_FUNC(  'BLOB TEXT' ) ) as integer) FROM RDB$DATABASE


Возникает ошибка:
Код: powershell
1.
2.
3.
Unsuccessful execution caused by system error that does not preclude successful execution of subsequent statements.
feature is not supported.
BLOB and array data types are not supported for conversion operation.



Но если через CAST привести тип параметра, то ошибки не возникает:
Код: plsql
1.
SELECT cast(BLOB_FUNC(  cast( 'BLOB TEXT' as blob ) ) as integer) FROM RDB$DATABASE
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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