/* create tables for test db */ --create sequence test_div_seq; commit; create domain D_ID as BIGINT; create domain D_BIGINT as BIGINT; create table test_div( test_div_id D_ID generated always as identity , numerator D_BIGINT , denominator D_BIGINT , result COMPUTED BY ( DIV(numerator, denominator) ) , constraint pk_test_div_id primary key (test_div_id) using index idx_test_div_id ); commit; -- create sequence test_blobs_seq; create domain D_BLOB as BLOB; create domain D_DESCRIPTION varchar(255) default 'No description entered' not null ; create domain D_FILETYPE char(3) default 'BIN' not null check (value in ( 'BIN', 'TXT') ); create domain D_PATH as varchar(8189) default '' not null ; create domain D_STATUS as CHAR(1) default 'U' not null check (VALUE IN ('U', 'F', 'L', 'W')); comment on domain D_STATUS is 'unset, failed, loaded, written'; create exception E_BLOB_EXCEPTION ''; create table test_blobs( test_blobs_id D_ID generated always as identity , description D_DESCRIPTION , file_type D_FILETYPE , source_file D_PATH , source_status D_STATUS , source_bytes D_BIGINT , target_file D_PATH , target_status D_STATUS , target_bytes D_BIGINT , the_blob D_BLOB , constraint pk_test_blobs_id primary key (test_blobs_id) using index idx_test_blobs_id ); set term ^; create or alter trigger t_iub_test_blobs for test_blobs before insert or update as begin new.file_type = upper(new.file_type); new.source_status = upper(new.source_status); new.target_status = upper(new.target_status); end ^ set term ;^ set term ^; create or alter procedure load_blob ( a_test_blob_id D_ID ) sql security definer as declare asource_file D_PATH; declare oldblob D_BLOB; declare newblob D_BLOB; declare result D_BIGINT; declare status D_STATUS; begin select source_file, the_blob from test_blobs where test_blobs_id = :a_test_blob_id into :asource_file, :oldblob; select LoadBlobFromFile( :asource_file ) from rdb$database into :newblob; if ( newblob is not null ) then status = 'L'; else status = 'F'; update test_blobs set the_blob = :newblob -- , source_bytes = :result , source_status = :status where test_blobs_id = :a_test_blob_id; when any do begin EXCEPTION E_BLOB_EXCEPTION 'Error updating test_blobs'; end end ^ set term ;^