Гость
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB / 6 сообщений из 6, страница 1 из 1
06.07.2016, 13:39
    #39268806
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
Привет.

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
07.07.2016, 06:26
    #39269379
IBExpert
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
А какой селект выполняет отладчик на этой строке?
...
Рейтинг: 0 / 0
07.07.2016, 21:50
    #39270162
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
IBExpertА какой селект выполняет отладчик на этой строке?
В этой строке переменной I присваивается результат UDF BLOB_FUNC, в которую переменная B типа BLOB передается в качестве параметра.
...
Рейтинг: 0 / 0
08.07.2016, 10:23
    #39270346
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
Кстати, если в качестве значения параметра в UDF передавать NULL, то в отладчике ошибки не возникает.

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



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

Отладчик в этом месте соответствующий селект выполнят. Текст этого селекта можно посмотреть в отладчике на соответствующей закладке.
...
Рейтинг: 0 / 0
09.07.2016, 09:51
    #39271033
Polesov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB
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
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / Ошибка при отладке хранимой процедуры, в которой в UDF передается BLOB / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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