powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / IBExpert [игнор отключен] [закрыт для гостей] / FB3. Редактор хранимых процедур не понимает подфункцию без параметров
11 сообщений из 11, страница 1 из 1
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38696853
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
разбирая OLTP тест Таблоида обнаружил, что в IBE 2014.7.8.1 редактор хранимых процедур не понимает подфункцию со скобочками без параметров. Без скобок всё нормально

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create or alter procedure SP_0
as
    declare function fn_internal_enable_reserving() returns boolean deterministic as
    begin
      return rdb$get_context('USER_SESSION', 'ENABLE_RESERVES_WHEN_ADD_INVOICE')='1';
    end
begin
  /* Procedure Text */

end



Ругается parsing error
...
Рейтинг: 0 / 0
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38696859
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кроме того, редактор хранимых процедур не понимает merge с конструкцией returning
Код: 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.
.............................................................................
            merge into tmp$perf_log t -- unit, trn_id
            using rdb$database s
            on t.unit = :a_unit  and t.trn_id = :v_curr_tx
            when MATCHED then
                update set
                    --fb_gdscode = :a_gdscode,
                    info = coalesce( info, '' ) || coalesce( trim(iif( info>'', '; ', '') || :a_info), ''),
                    dts_end = :v_dts,
                    elapsed_ms = datediff(millisecond from dts_beg to :v_dts),
                    aux1 = :a_aux1,
                    aux2 = :a_aux2
             when NOT matched then
                 insert(
                     id,
                     unit,
                     info,
                     ip,
                     trn_id,
                     dts_beg
                 )
                 values(
                     gen_id(g_perf_log,1),
                     :a_unit,
                     :a_info,
                     rdb$get_context('SYSTEM', 'CLIENT_ADDRESS'),
                     :v_curr_tx,
                     :v_dts
                 )
             returning id, dts_end, info into v_id, v_end, v_info; -- not null ==> this is FINISH of some mode
.......................................................................................................................
...
Рейтинг: 0 / 0
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38696974
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис в IBE 2014.7.8.1 редактор хранимых процедур не понимает подфункцию со скобочками без параметров.

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


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

да, и доступна она была уже в первой альфе

RN Supplemental SQL 2008 Features for MERGE

Adriano dos Santos Fernandes

In summary, support for MERGE was supplemented with the introduction of these features:
• Addition of the DELETE extension (CORE-2005)
• Enabling the use of multiple WHEN MATCHED | NOT MATCHED clauses (CORE-3639) and ability to
apply conditions to WHEN MATCHED | NOT MATCHED
• Addition of the RETURNING ... INTO ... clause (CORE-3020)
The purpose of MERGE is to read data from the source and INSERT or UPDATE in the target table according
to a condition. It is available in DSQL and PSQL.

Syntax Pattern

<merge statement> ::=
MERGE
INTO <table or view> [ [AS] <correlation name> ]
USING <table or view or derived table> [ [AS] <correlation name> ]
ON <condition>
<merge when>...
<returning clause>
<merge when> ::=
<merge when matched> |
<merge when not matched>
<merge when matched> ::=
WHEN MATCHED [ AND <condition> ] THEN
{ UPDATE SET <assignment list> | DELETE }
<merge when not matched> ::=
WHEN NOT MATCHED [ AND <condition> ] THEN
INSERT [ <left paren> <column list> <right paren> ]
VALUES <left paren> <value list> <right paren>

Rules
At least one of <merge when matched> or <merge when not matched> should be specified.
...
Рейтинг: 0 / 0
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38697460
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисда, и доступна она была уже в первой альфе


Гм. А чего returning возвращает, если обновлено/вставлено несколько записей?
...
Рейтинг: 0 / 0
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38697492
Таблоид
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpertГм. А чего returning возвращает, если обновлено/вставлено несколько записей?multiple rows in singleton select.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
recreate table t1(id int, x int, y int);
recreate table t2(id int, x int, y int);
commit;
insert into t1 select row_number()over(), rand()*3, rand()*10 from rdb$types rows 20;
insert into t2 select row_number()over(), rand()*3, rand()*10 from rdb$types rows 20;
commit;

execute block returns(out_id int) as
begin
  merge into t2
  using t1
  on t2.id = t1.id
  --and t1.id = 1
  when matched then update set t2.x=t2.x+t1.x, t2.y=t2.y-t1.y
  returning t2.id into out_id;
  suspend;
end
...
Рейтинг: 0 / 0
FB3. Редактор хранимых процедур не понимает подфункцию без параметров
    #38697565
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IBExpert,

delete и update тоже могут удалять/обновлять несколько записей.

Интересно что merge и в синтаксисе 2.5 не обрабатывается корректно.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or alter procedure SP0
as
begin
  merge into customer c
  using rdb$database
  on 1=1
  when matched then update set c.city = c.city;
end



пишет parsing error

а вот так всё нормально

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or alter procedure SP0
as
begin
  merge into customer c
  using rdb$database r
  on 1=1
  when matched then update set c.city = c.city;
end



Ещё хотелось бы обратить внимание, что в новом MERGE есть ещё и DELETE

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or alter procedure SP0
as
begin
  merge into customer c
  using rdb$database r
  on 1=1
  when matched then delete;
end



Parsing error

ну и ещё теперь секций when matched и when not matched может быть несколько если в них есть дополнительные условия

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or alter procedure SP0
as
begin
  merge into customer c
  using rdb$database r
  on 1=1
  when matched and c.city is null then update set c.city='AAA';
end



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

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

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


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