Типизация BLOB-значения

Синтаксис

 
modify_blob_type([<курсор>, ]<тип BLOB-значения>[, <номер>]);

<курсор> – курсорная переменная, для которой устанавливается номер BLOB-столбца (если не задан, то функция применяется для канала оператора EXECUTE);

<тип BLOB-значения> – переменная типа INTEGER, значение которой используется для идентификации данных BLOB-столбца (текст, графика, анимация, музыка и т.п.);

<номер> – порядковый номер BLOB-столбца.

Описание

Функция изменяет тип BLOB-значения заданного столбца в выборке. Типизация BLOB-значений регламентируется пользователем. Если аргумент <номер> не задан, по умолчанию используется первый BLOB-столбец выборки.

Пример

Создается таблица tblob, в нее заносятся 10 записей, затем устанавливаются типы BLOB-значений. В конце select-запросом проверяются установленные типы BLOB-значений.

create or replace procedure blobtest(in n int default 10)
declare
    var s cursor(i int, b1 blob, b2 blob); //
    var i,j int default 1; //
    var b byte(100); //
    exception addbloberr for custom 1; //
code
    execute "create or replace table tblob(i int, b1 blob, b2 blob);"; //
    while i <= n loop
       execute direct "insert into tblob(i,b1,b2) values(? , NULL, NULL);" using i; //
       j := 0; //
       while j < i * 3 loop
         b[j] := i * 10 + j; //
         j := j + 1; //
       endloop
       if add_blob(b, i * 3, 2) <> 0 then
          signal addbloberr; //
       endif
       if add_blob(b, i * 3, 3) <> 0 then
          signal addbloberr; //
       endif
       modify_blob_type(i + 100, 2); //
       i := i + 1; //
    endloop
    open s for direct "select i, b1, b2 from tblob;";  //
    while not outofcursor(s) loop
       modify_blob_type(s, s.i + 1000, 3); //
       fetch s;  //
    endloop
exceptions
when others then
    resignal; //
end;

execute blobtest();
select i, getlong(b1, 20), getlong(b2, 20) from tblob;