powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
9 сообщений из 9, страница 1 из 1
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39322872
Ritter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброе время суток.
При разработке процедуры появилась ошибка:
<<
Unsuccessful execution caused by system error that does not preclude successful of subsequent statements. Error while parsing procedure SP_TEST`s BLR. invalid request BLR at offset 181. context already in use (BLR error).
>>

Ниже приведен текст упрощенной тестовой процедуры, поясняющий проблему.
Если в процедуре строка
Код: sql
1.
--    if (c.id_1 between 2 and 3) then result=2;

закомментирована - процедура компилируется; если коммент убираем появляется ошибка.
Как я понял все дело в подзапросе (select t.id+1 from rdb$database) - если его убираем или переписываем например через функцию - ошибка исчезает(естественно в реальной процедуре реальный подзапрос к определенной таблице).
Т.е. какая-то странная ошибка при повторном чтении значения поля неявного курсора c?
Или я чего-то забыл?

Версия сервера: v3.0.1 x64.

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
SET SQL DIALECT 3;

/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

SET TERM ^ ;

CREATE PROCEDURE SP_TESP
RETURNS (
    RESULT SMALLINT)
AS
BEGIN
  SUSPEND;
END^

SET TERM ; ^

/******************************************************************************/
/***                                 Tables                                 ***/
/******************************************************************************/

CREATE TABLE TEST (
    ID  SMALLINT
);


/******************************************************************************/
/***                           Stored procedures                            ***/
/******************************************************************************/

SET TERM ^ ;

ALTER PROCEDURE SP_TESP
RETURNS (
    RESULT SMALLINT)
AS
begin
  result = 0;
  for select t.id,(select t.id+1 from rdb$database) as id_1
        from test t
  as cursor c
  do begin
    if (c.id_1 between 0 and 1) then result=1;
--    if (c.id_1 between 2 and 3) then result=2;
  end

  suspend;

end^


SET TERM ; ^

COMMIT WORK;
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39322885
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ritter,

напиши в трекер
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39322886
Ritter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис
напиши в трекер

А я не умею ...
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39322896
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ritter,

а что там уметь то. Скрипт воспроизведения у тебя есть. Заголовок тикета в гугль переводчике сделаешь? если английский не знаешь. Типа такого: типа того Error reuse reference cursor if one of the query field is computed using a subquery.
В скрипте пометь место бага

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
  
...
  as cursor c
  do begin
    if (c.id_1 between 0 and 1) then result=1;
--    if (c.id_1 between 2 and 3) then result=2; -- If uncommented error occurs.
  end
....



Текст ошибки укажи в текстовом виде, без скрипншота. Ну и версию Firebird укажи.

Всё. Если у тебя не получится, тогда занесу сам.
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39324978
Ritter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис

Если не сложно, занеси сам.
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39325023
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ritter,

CORE-5373
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39325081
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ritter,

судя по комментарию dimitr быстрого фикса не предвидится. Для этого упрощённого случая есть вот такой workaround

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
RECREATE PROCEDURE SP_TESP
RETURNS ( 
    RESULT SMALLINT) 
AS 
begin 
  result = 0; 
  for select t.id, LAST_VALUE((select t.id+1 from rdb$database)) OVER(ORDER BY t.id) as id_1
       from test t 
       -- возможно надо будет написать к запросу ORDER BY для восстановления прежнего порядка
  as cursor c 
  do begin 
    result = 0;
    if (c.id_1 between 0 and 1) then result=1; 
    if (c.id_1 between 2 and 3) then result=2;
    if (c.id_1 between 4 and 5) then result=3;

    suspend; 
  end 
end



Не знаю насколько там сложный у тебя запрос и подойдёт ли тебе такой обходной путь.

З.Ы. Только что заметил, что у тебя процедура называется SP_TESP, а не SP_TEST. Не знаю умышлено ли ты так написал или просто ошибся.
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39325225
Ritter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис

Спасибо!
...
Рейтинг: 0 / 0
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
    #39325229
Ritter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
З.Ы. Только что заметил, что у тебя процедура называется SP_TESP, а не SP_TEST. Не знаю умышлено ли ты так написал или просто ошибся.

Ну конечно ошибся в имени тестовой процедуры.

Не знаю насколько там сложный у тебя запрос и подойдёт ли тебе такой обходной путь.
Пути обхода этой ошибки мне известны, спасибо!
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]