Типизация 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;