Здравствуйте!
Возникло не сколько странных проблем с СУБД/БД никак не могу решить, может сможете что-то подсказать... IBExpert + FB2.5
1. Не воспринимает CASE, ругается на строке (!) Parsing error! Пробовал в конце каждой строки when ставить ";" без разницы. Переделал на IF всё сразу заработало.
Код:
begin
case TYPE
when 1 then a_shift=:shift (!)
when 2 then b_shift=:shift
when 3 then c_shift=:shift
end
end
2. Из программы посылается запрос в БД ввиде списка через запятую номеров строк нужной таблицы (проверено список правильный, перед отправкой отображается в программе в тестовом поле), список разбивается в БД спец процедурой (процедура проверена вручную - список разбивается на таблицу):
Код:
create or alter procedure LIST_TO_VALUES (
LST blob sub_type 1 segment size 80)
returns (
ID varchar(100))
as
declare variable I integer = 1;
declare variable J integer = 1;
begin
while (i <= char_length(lst)) do begin
if (substring(lst from i for 1) = ',') then begin
if (i > j) then
id = trim(leading from substring(lst from j for i - j));
else
id = null;
if (id is not null) then suspend;
j = i+1;
end
i = i+1;
end
if (i > j) then
id = trim(leading from substring(lst from j for i - j));
else
id = null;
if (id is not null) then suspend;
end
Список обрабатывается двумя хранимыми процедурами в БД:
А. Первая совершает определённое действие над всем списком, корректировка данных в БД для строк из списка. Увы, почему-то обрабатывает только последний (!) номер из списка.
Содержит конструкцию:
Код:
for
select id from list_to_values (:list_value) into :id
do < далее код обработки >
Б. Вторая процедура должна возвращать таблицу данных собранных из нескольких таблиц на основе номеров из списка. Увы, возвращает пустую таблицу только с названиями полей, но данных нет!
Код:
create or alter procedure RPR_OFFICES (
LIST_ID NOTE_BLOB)
returns (
"Компания" NAME,
"Офис" NAME,
"ОфисНомер" NUM)
as
begin
for
select
c.company_name, o.name, o.number
from
list_to_values(:list_id) l
left join offices o on l.id = o.office_id
left join companies c on o.company_id=c.company_id
order by 1,2,3
into :"Компания", :"Офис", :"ОфисНомер"
do begin
suspend;
end
end
Ковыряюсь над этими проблемами уже два дня не могу понять что неправильно... ?! Может СУБД работает в режиме старой версии типа FB1.0? Как это проверить в IBExpert???