powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / курсоры в FB3
11 сообщений из 11, страница 1 из 1
курсоры в FB3
    #38646056
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в последнем билде Firebird 3.0.0.31143 добавили такую замечательную возможность (я её давно ждал)

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
CREATE OR ALTER PROCEDURE SP_0
RETURNS (
    CODE_DEPARTURE INT,
    CODE_BREED INT)
AS
BEGIN
  FOR SELECT CODE_DEPARTURE
      FROM DEPARTURE
      AS CURSOR C                               -- если есть эта конструкция можно без into
  DO
  BEGIN
    FOR SELECT CODE_BREED
        FROM BREED
        WHERE CODE_DEPARTURE = :C.CODE_DEPARTURE -- можно ссылаться на курсор с : и без
        INTO :CODE_BREED
    DO BEGIN
      CODE_DEPARTURE = C.CODE_DEPARTURE;         -- и тут тоже
      SUSPEND;
    END
  END
END



однако предварительный парсер процедуры в IBE сейчас не понимает этой возможности. Ссылаться можно и на явный именованный курсор.

дополнительная информация вот тут

CORE-4434 CORE-4403
...
Рейтинг: 0 / 0
курсоры в FB3
    #38648351
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парсер вроде заточил.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38648407
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо. Для for парсер не даёт ошибок, но при использовании явных курсоров пишет Parser error

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
CREATE OR ALTER PROCEDURE NEW_PROCEDURE
returns (i int)
AS
  declare c cursor for (
     select id ,id_t3
     from t2
  );
begin
  open c;
  while (1=1)
  do
  begin
    fetch c;
    if (row_count = 0) then
      exit;
    i = c.id;
    suspend;
  end
end



вот в этих конструкциях надо позволять не писать INTO

Код: plaintext
1.
    FETCH <cursor_name> INTO <var_name> [, <var_name> ...];
    FETCH {NEXT | PRIOR | FIRST | LAST | ABSOLUTE <n> | RELATIVE <n>} FROM <cursor_name> INTO <var_name> [, <var_name> ...];
...
Рейтинг: 0 / 0
курсоры в FB3
    #38648423
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
OFFTOP

заметил что автогрант не выдаёт права на PSQL функции ни для процедур ни для пакетов
...
Рейтинг: 0 / 0
курсоры в FB3
    #38649783
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисвот в этих конструкциях надо позволять не писать INTO


Это сделал.

Симонов Денисзаметил что автогрант не выдаёт права на PSQL функции ни для процедур ни для пакетов


Это тоже.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38650990
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertСимонов Денисвот в этих конструкциях надо позволять не писать INTO


Это сделал.


спасибо. Теперь работает.

IBExpertСимонов Денисзаметил что автогрант не выдаёт права на PSQL функции ни для процедур ни для пакетов


Это тоже.

Не совсем. Теперь пытается автогрант дать и на встроеные функции (типа IIF, COALESCE, NULLIF ...)

IBE
Код: sql
1.
GRANT EXECUTE ON FUNCTION IIF TO PACKAGE PKG_DNA_GENETIC



Код: plaintext
1.
2.
3.
4.
This operation is not defined for system tables.
unsuccessful metadata update.
GRANT failed.
action cancelled by trigger (0) to preserve data integrity.
could not find object for GRANT.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38650995
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я так понимаю функции для автогранта получаются в результате парсинга, а не из зависимостей. Ну даже если так можно хотябы проверять наличие функции прежде чем давать грант.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38651245
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денися так понимаю функции для автогранта получаются в результате парсинга, а не из зависимостей. Ну даже если так можно хотябы проверять наличие функции прежде чем давать грант.

Конечно, нужно проверять. Исправил.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38651272
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо. Вроде работает. Там правда ещё надо подправить чтобы автогрант исключал процедуры собственного пакета

Код: plsql
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.
SET TERM ^ ;

CREATE package new_package
as
begin
  procedure p1 returns (i int);
  procedure p2 returns (i int);
  procedure p3;
end^

CREATE package body new_package
as
begin
  procedure p1 returns (i int)
  as
  begin
    i = 1;
    suspend;
  end

  procedure p2 returns (i int)
  as
  begin
    execute procedure p3;
    for select i
        from p1
        into :i
    do suspend;
  end

  procedure p3
  as
  begin
  end
end^

SET TERM ; ^



зачем то генерирует

Код: sql
1.
GRANT EXECUTE ON PROCEDURE P3 TO PACKAGE NEW_PACKAGE;
...
Рейтинг: 0 / 0
курсоры в FB3
    #38651709
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисТам правда ещё надо подправить чтобы автогрант исключал процедуры собственного пакета


Исправил.
...
Рейтинг: 0 / 0
курсоры в FB3
    #38651719
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

спасибо
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / курсоры в FB3
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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