Поведение последовательности в операторах слияния Oracle

#sql #oracle #oracle10g

#sql #Oracle #oracle10g

Вопрос:

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

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

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

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

Спасибо,

Комментарии:

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

2. Ссылка

3. Вы должны превратить свои комментарии в ответ, а затем принять его. Вам разрешено принимать свои собственные ответы (возможно, вы даже получите значок за это). Принятые ответы — это конечная игра SO.

Ответ №1:

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

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

Ответ №2:

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

 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;
  

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

для дальнейшего см. Этоhttp://alex-td.blogspot.in/2012/07/sequences-nextval-in-merge-operator.html