Вы можете использовать оператор MERGE
:
MERGE INTO destination_table dst
USING (
SELECT ROWNUM rn,
value
FROM your_codes_table
) src
ON ( src.rn = dst.id )
WHEN MATCHED THEN
UPDATE SET code = src.value
WHEN NOT MATCHED THEN
INSERT ( id, code ) VALUES ( destination_table__id__seq.NEXTVAL, src.value );
Однако это будет увеличивать последовательность для каждой строки, обновленной и вставленной, и это может быть не тем, что вы хотите.
Самый простой способ - удалить существующие строки (без кодов) из таблицы назначения и удалить последовательность, на которой основаны значения id
, а затем заново создать последовательность (чтобы восстановить последовательность до ее начального значения):
DELETE FROM destination_table;
DROP SEQUENCE destination_table__id__seq;
CREATE SEQUENCE destination_table__id__seq;
и вставьте строки:
INSERT INTO destination_table ( id, code )
SELECT destination_table__id__seq.NEXTVAL,
value
FROM your_codes_table
db <> скрипка