#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