Поведение последовательности в операторах слияния Oracle - PullRequest
5 голосов
/ 20 октября 2011

Недавно я столкнулся с проблемой, связанной с увеличением значений последовательности внутри оператора слияния.

Предложение MERGE INSERT обращается к последовательности для заполнения одного из столбцов. Я отметил, что, не имеет значения, сколько строк действительно подходит для вставки, последовательность постепенно увеличивается для общего количества записей в предложении источника SELECT.

Почему это может происходить?

Я работаю на Oracle 10gR2

Спасибо

Ответы [ 2 ]

2 голосов
/ 31 марта 2016

Вы можете решить эту проблему, используя функцию для увеличения значения следующим образом

CREATE OR REPLACE
FUNCTION seq_nextval_on_demand (p_seq_name  IN  VARCHAR2)
  RETURN NUMBER
IS
  v_seq_val  NUMBER;
BEGIN
  EXECUTE IMMEDIATE 'select ' || p_seq_name || '.nextval from dual'
     INTO v_seq_val;

  RETURN v_seq_val;
END seq_nextval_on_demand;

логика - функция вызывается только тогда, когда ветвь вставки оператора слияния действительно используется.

для дальнейшей ссылки http://alex -td.blogspot.in / 2012/07 / последовательности-NEXTVAL-в-слияния-operator.html

2 голосов
/ 08 ноября 2011

Я нашел ответ. Согласно документации Oracle, последовательность будет увеличиваться для каждой объединенной записи, и не имеет значения, сколько записей фактически вставлено.

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/pseudocolumns002.htm#sthref809

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...