Гость
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64 / 9 сообщений из 9, страница 1 из 1
07.10.2016, 15:15
    #39322872
Ritter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
Доброе время суток.
При разработке процедуры появилась ошибка:
<<
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
07.10.2016, 15:24
    #39322885
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
Ritter,

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

А я не умею ...
...
Рейтинг: 0 / 0
07.10.2016, 15:38
    #39322896
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
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
12.10.2016, 08:02
    #39324978
Ritter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
Симонов Денис

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

CORE-5373
...
Рейтинг: 0 / 0
12.10.2016, 10:41
    #39325081
Симонов Денис
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
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
12.10.2016, 12:30
    #39325225
Ritter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Error while parsing procedure SP_TEST`s BLR ... Firebird v3.0.1 x64
Симонов Денис

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

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

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


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