Задался вопросом сохранения настроек через запятую в одном поле с последующим разбором этой строки в самом Firebird'е.
Вот что получилось. Меня устраивает. Может кому поможет.
create or alter procedure GET_WORDS (
INSTR varchar(30000),
DELIMITER varchar(200) = ' ')
returns (
NUMBER integer,
WORD varchar(30000))
as
declare variable I integer;
declare variable J integer;
begin
NUMBER = 1;
I = 1;
J = position(:DELIMITER, INSTR, I);
if (J > I) then
begin
WORD = substring(INSTR from I for J - I);
while (WORD is not null) do
begin
if (char_length(trim(WORD)) > 0) then
begin
WORD = trim(WORD);
suspend;
NUMBER = NUMBER + 1;
end
I = J + char_length(DELIMITER);
J = position(:DELIMITER, INSTR, I);
if (J = 0) then
begin
J = char_length(INSTR);
if (I < J) then
WORD = substring(INSTR from I for J);
else
WORD = null;
end
else
WORD = substring(INSTR from I for J - I);
end
end
end
Вот что получилось. Меня устраивает. Может кому поможет.
create or alter procedure GET_WORDS (
INSTR varchar(30000),
DELIMITER varchar(200) = ' ')
returns (
NUMBER integer,
WORD varchar(30000))
as
declare variable I integer;
declare variable J integer;
begin
NUMBER = 1;
I = 1;
J = position(:DELIMITER, INSTR, I);
if (J > I) then
begin
WORD = substring(INSTR from I for J - I);
while (WORD is not null) do
begin
if (char_length(trim(WORD)) > 0) then
begin
WORD = trim(WORD);
suspend;
NUMBER = NUMBER + 1;
end
I = J + char_length(DELIMITER);
J = position(:DELIMITER, INSTR, I);
if (J = 0) then
begin
J = char_length(INSTR);
if (I < J) then
WORD = substring(INSTR from I for J);
else
WORD = null;
end
else
WORD = substring(INSTR from I for J - I);
end
end
end
Комментарии