Я запускаю код PL/SQL на оракуле, который должен вставлять данные из таблицы «А» в таблицу «В» вместе с уникальной последовательностью, возвращаемой из функции. Мой sql-запрос выглядит так
SEQUENCE_COLUMN:=SEQ_COL_FUNC('WTPARTMASTER', 'ELEM10',SEQUENCE_COLUMN);
sequence_value:=seq_val_func('WTPARTMASTER', 'ELEM10',sequence_value);
dest_Columns:=dest_Columns || ',' || sequence_column;
QUERY_TEST := 'insert into wbm.' || DESTINATION_TABLE || '(' || DEST_COLUMNS || ') select ' || SRC_COLUMNS || ', :value from ' || SOURCE_TABLE;
execute immediate query_test USING sequence_value;
Теперь проблема в том, что оператор select выводит все данные за один раз, и я получаю ту же последовательность №. в каждой строке вместо уникального порядкового номера.
Как можно манипулировать запросом здесь, чтобы я получал данные, а также последовательность, вставленную в мою целевую таблицу, одну за другой, так что последовательность no уникальна.
Спасибо за вашу помощь.
seq_val_func
— использует ли он реальную последовательность Oracle для генерации следующего значения? Можете ли вы вызвать функцию непосредственно из вставки, а не сохранять результат в переменной и передавать ее как привязку? Это может по-прежнему давать одно и то же значение для нескольких строк, если вы делаетеinsert ... select ...
, но это зависит. Было бы лучше использовать последовательность непосредственно в операторе — может быть, ваша функция может вернуть имя последовательности, и вместо этого вы сделаете эту часть динамического оператора? - person Alex Poole   schedule 24.12.2013