SQL запрос на обновление 1000 записей - PullRequest
0 голосов
/ 06 февраля 2020

Я создал 1000 записей с идентификатором в качестве идентификатора последовательности. Теперь у меня есть список из 1000 уникальных кодов, которые мне нужно присвоить каждой записи.

Примерно так:

Я ищу предложения для достижения этого с помощью скрипта SQL.

Ответы [ 2 ]

2 голосов
/ 06 февраля 2020

Вы можете использовать оператор 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 <> скрипка

0 голосов
/ 06 февраля 2020

Вы просто хотите row_number()?

select code, row_number() over (order by code) as id
from t;
...