процедура в FB 2.0.6

Запросы, планы, оптимизация запросов, ...

Модераторы: kdv, CyberMax

Ответить
SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

процедура в FB 2.0.6

Сообщение SeventhSon » 19 окт 2011, 08:07

Создал процедурку:

Код: Выделить всё

SET TERM ^ ;

create or alter procedure SL_REPLACE_STR (
    STRING char(250),
    SRCHFOR char(250),
    REPLACEWITH char(250))
returns (
    REZ char(250))
as
declare variable STRLEN smallint;
declare variable SRCHLEN smallint;
declare variable I integer;
begin
  strlen=char_length(trim(string));
  srchlen=char_length(trim(srchfor));
  rez='';
  if (srchlen>strlen) then exit;
  i=1;
  while(i<=(strlen-srchlen+1)) do
  begin
   if (substring(string from i for srchlen)=srchfor) then
    begin
     rez=substring(string from 1 for i-1)||trim(replacewith)||substring(string from i+srchlen for strlen);
    end
   i=i+1;
  end
end^

SET TERM ; ^

GRANT EXECUTE ON PROCEDURE SL_REPLACE_STR TO SYSDBA;
заменяет в исходной строке искомую строку на подстроку.в IBExpert запускаю,подсовываю параметры 123,2,q выдаёт 1q3 как и положено.
но вот когда открываю редактор и делаю тот же запрос SELECT * FROM SL_REPLACE_STR('123', '2', 'q') выдаёт null.
я не понимаю что происходит.подскажите пожалуйста в чём я затупил.

dimitr
Разработчик Firebird
Сообщения: 888
Зарегистрирован: 26 окт 2004, 16:20

Re: процедура в FB 2.0.6

Сообщение dimitr » 19 окт 2011, 10:03

или вызывай процедуру через execute procedure, или допиши в нее suspend

kdv
Forum Admin
Сообщения: 6595
Зарегистрирован: 25 окт 2004, 18:07

Re: процедура в FB 2.0.6

Сообщение kdv » 19 окт 2011, 10:09


SeventhSon
Сообщения: 25
Зарегистрирован: 11 авг 2007, 17:40

Re: процедура в FB 2.0.6

Сообщение SeventhSon » 19 окт 2011, 20:59

спасибо.я думал что suspend нужен только в цикле for. и смутило что IBExpert в статусной окне писал значений выходной переменной.
всё заработало:)

Ответить