Konstantin R. Beliaev wrote:
> Еще Ann или Helen приводили пример хранимки, превращающей строку в датасет.
<...>

Да и не только они:

create or alter procedure CONVERT_STRING_TO_ROWSET (
    STRING varchar(32700),
    SEPARATOR char(1) = ';')
returns (
    ROW varchar(255))
AS
/*
----- Original Message -----
From: "sasha" <trofimich-re5jqeeqqe8avxtiumw...@public.gmane.org>
Newsgroups: gmane.comp.db.firebird.russian
To: <ru-firebird-/jypxa39uh5tlh3mboc...@public.gmane.org>
Sent: Monday, October 29, 2007 2:35 PM
Subject: Re: Подготовленный запрос с in
>
>> Спасибо, попробую
>
> Мы как-то года полтора назад сравнивали скорость IN (более 1000
> элементов) и джойна с процедурой, которая парсит строку. С процедурой
> быстрее в разы. Могу даже примером процедуры для парсинга поделиться
*/
begin
  Separator = coalesce(Separator, ';');
  Row = '';
  while (String != '') DO
  begin
    if (substring(String from 1 for 1) != Separator) then
      Row = Row || substring(String from 1 for 1);
    else
    begin
      suspend;
      Row = '';
    end
    String = substring(String from 2);
  end
  if (Row != '') then
    suspend;
end

Ответить