powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge и seq.currval
14 сообщений из 14, страница 1 из 1
merge и seq.currval
    #39351111
israelshamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем привет. Подскажите, пожалуйста, какой нибудь еврейский метод аудита currval для сиквенса, используемого в merge:
MERGE INTO tbl1
USING ( select * from tbl2) t
ON (tbl1.n = t.n)
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT (...)
VALUES (seq.nextval,...);
На ум приходит триггер for each row и разбивка merge на отдельные update и insert, но что - то подсказывает, эта идея некошерная
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351294
Фотография --Eugene--
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamir,

Нафиг?
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351344
Фотография orawish
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirВсем привет. Подскажите, пожалуйста, какой нибудь еврейский метод аудита currval для сиквенса, используемого в merge:
MERGE INTO tbl1
USING ( select * from tbl2) t
ON (tbl1.n = t.n)
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT (...)
VALUES (seq.nextval,...);
На ум приходит триггер for each row и разбивка merge на отдельные update и insert, но что - то подсказывает, эта идея некошерная
а таки чисто спросите у того сиквенса его currval до/после того merge
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351393
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
orawishisraelshamirВсем привет. Подскажите, пожалуйста, какой нибудь еврейский метод аудита currval для сиквенса, используемого в merge:
MERGE INTO tbl1
USING ( select * from tbl2) t
ON (tbl1.n = t.n)
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT (...)
VALUES (seq.nextval,...);
На ум приходит триггер for each row и разбивка merge на отдельные update и insert, но что - то подсказывает, эта идея некошерная
а таки чисто спросите у того сиквенса его currval до/после того merge

не ожидал что мерже палит номера даже если инсертов не было
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
SQL> MERGE INTO t
  2  USING ( select 1 id from dual) tt
  3  ON (1 = 1)
  4  WHEN MATCHED THEN UPDATE SET n='u'
  5  WHEN NOT MATCHED THEN INSERT (id,n) VALUES (s.nextval,'i')
  6  /

4 rows merged.

SQL> select s.currval from dual;

   CURRVAL
----------
       124




.....
stax
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351396
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirВсем привет. Подскажите, пожалуйста, какой нибудь еврейский метод аудита currval для сиквенса, используемого в merge:
MERGE INTO tbl1
USING ( select * from tbl2) t
ON (tbl1.n = t.n)
WHEN MATCHED THEN UPDATE SET ...
WHEN NOT MATCHED THEN INSERT (...)
VALUES (seq.nextval,...);
На ум приходит триггер for each row и разбивка merge на отдельные update и insert, но что - то подсказывает, эта идея некошерная

не совсем понял
в чем проблема?


.....
stax
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351422
israelshamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
stax..,

мне надо получить все значения сиквенса, которые были сгенерированы этим мержем в этом все дело. не хотелось бы разбивать merge на update и insert и в цикле получать currval для каждой вставленной записи.
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351431
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirstax..,

мне надо получить все значения сиквенса, которые были сгенерированы этим мержем в этом все дело. не хотелось бы разбивать merge на update и insert и в цикле получать currval для каждой вставленной записи.
а как Вы их можете получить
допустим было 4 изменения 2 удаления и три инсерта
как узнаете что было именно 3 инсерта (без привязки к currval)?

ps
merge скользкий оператор

.....
stax
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351432
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirмне надо получить все значения сиквенса, которые были сгенерированы этим мержем в этом все дело

Число значений сиквенса, которые были сгенерированы мержем = SQL%ROWCOUNT:

Код: 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.
38.
39.
40.
41.
42.
43.
SQL> create sequence s1
  2  /

Sequence created.

SQL> create table emp1
  2    as
  3      select  empno,
  4              ename
  5        from  emp
  6        where deptno = 10
  7  /

Table created.

SQL> merge
  2    into emp1 t
  3    using emp s
  4    on (t.empno = s.empno)
  5    when matched
  6      then
  7        update
  8           set ename = s.ename
  9    when not matched
 10      then
 11        insert
 12          values(
 13                 s1.nextval,
 14                 s.ename
 15                )
 16  /

14 rows merged.

SQL> select  s1.currval
  2    from  dual
  3  /

   CURRVAL
----------
        14

SQL> 



SY.
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351434
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirstax..,

мне надо получить все значения сиквенса, которые были сгенерированы этим мержем в этом все дело. не хотелось бы разбивать merge на update и insert и в цикле получать currval для каждой вставленной записи.
запоминать куррвал в триггере он инсерт в коллекцию или в тмр табличку

.....
stax
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351437
Maxim Demenko
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY,

Особенно все замечательно будет выглядеть в случае распараллеливания этого хозяйства, интереснее всего получается с разными DOP...



Regards

Maxim
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351446
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SYisraelshamirмне надо получить все значения сиквенса, которые были сгенерированы этим мержем в этом все дело

Число значений сиквенса, которые были сгенерированы мержем = SQL%ROWCOUNT:

Код: 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.
38.
39.
40.
41.
42.
43.
SQL> create sequence s1
  2  /

Sequence created.

SQL> create table emp1
  2    as
  3      select  empno,
  4              ename
  5        from  emp
  6        where deptno = 10
  7  /

Table created.

SQL> merge
  2    into emp1 t
  3    using emp s
  4    on (t.empno = s.empno)
  5    when matched
  6      then
  7        update
  8           set ename = s.ename
  9    when not matched
 10      then
 11        insert
 12          values(
 13                 s1.nextval,
 14                 s.ename
 15                )
 16  /

14 rows merged.

SQL> select  s1.currval
  2    from  dual
  3  /

   CURRVAL
----------
        14

SQL> 



SY.
1) нужны те которые сгенерированы для вставки
2) в паралельных тоже могут палить номера

.....
stax
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351468
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stax..1) нужны те которые сгенерированы для вставки
2) в паралельных тоже могут палить номера


Или тригер на insert, или UDF:

Код: 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.
38.
39.
40.
41.
42.
43.
44.
45.
46.
SQL> set serveroutput on
SQL> create or replace
  2    function echo(
  3                  p_val number
  4                 )
  5      return number
  6      is
  7      begin
  8          dbms_output.put_line(p_val); -- change to logging
  9          return p_val;
 10  end;
 11  /

Function created.

SQL> merge
  2    into emp1 t
  3    using emp s
  4    on (t.empno = s.empno)
  5    when matched
  6      then
  7        update
  8           set ename = s.ename
  9    when not matched
 10      then
 11        insert
 12          values(
 13                 echo(s1.nextval),
 14                 s.ename
 15                )
 16  /
32
33
34
35
36
37
38
39
40
41
42

14 rows merged.

SQL> 



SY.
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351475
israelshamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем большое спасибо за помощь! Буду использовать UDF.
...
Рейтинг: 0 / 0
merge и seq.currval
    #39351941
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
israelshamirВсем большое спасибо за помощь! Буду использовать UDF.
я б спрятал nextval в тело ф-ции (без параметров)
тогда matched не будет палить номера

ps
правда есть нюанс с многократным использованием nextval

.....
stax
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / merge и seq.currval
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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