--connect 'd:/usr/doc/hoe.gdb' user 'sysdba' password 'masterkey'; --show procedures; -- DROP EXTERNAL FUNCTION mregexp; DECLARE EXTERNAL FUNCTION mregexp CSTRING(64), CSTRING(64), CSTRING(64) RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_mregexp' MODULE_NAME 'udf_onig.dll'; DECLARE EXTERNAL FUNCTION onig_new CSTRING(64), CSTRING(64) RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_onig_new' MODULE_NAME 'udf_onig.dll'; DECLARE EXTERNAL FUNCTION onig_search INTEGER, CSTRING(64) RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_onig_search' MODULE_NAME 'udf_onig.dll'; DECLARE EXTERNAL FUNCTION onig_free INTEGER RETURNS INTEGER BY VALUE ENTRY_POINT 'fn_onig_free' MODULE_NAME 'udf_onig.dll'; --select mregexp('a','a','ASCII') from rdb$database; --drop table j; create table j (s varchar(32)); insert into j values ('あいう'); insert into j values ('かきく'); insert into j values ('んあいうん'); insert into j values ('イあ'); --select s from j where mregexp(s,'あ.う','ASCII'); --select s from j where mregexp(s,'あ.う','SJIS'); --select s from j where mregexp(s,'い','ASCII'); --select s from j where mregexp(s,'い','SJIS'); select s,mregexp(s,'あ.う','SJIS') from j; select s,mregexp(s,'い','SJIS') from j; set term !! ; create or alter procedure onig_test_mregexp(pat varchar(20)) returns (str varchar(32), matched integer) as begin for select s,mregexp(s,:pat,'SJIS') from j into :str,:matched do suspend; end!! set term ; !! select * from onig_test_mregexp('あ.う'); set term !! ; create or alter procedure onig_test(pat varchar(20)) returns (str varchar(20), matched integer) as DECLARE VARIABLE regex INTEGER; DECLARE VARIABLE ret INTEGER; begin regex = onig_new(:pat, 'SJIS'); if (regex > 0) then begin for select s,onig_search(:regex, s) from j into :str, :matched do suspend; ret = onig_free(regex); end end!! set term ; !! select * from onig_test('あ.う');