Выберите и обновите строки в таблице, увеличивая значения - PullRequest
0 голосов
/ 04 октября 2018

У меня есть таблица базы данных, в которую я добавляю столбец sort_order.Я хочу перебрать каждую строку в таблице и установить sort_order, увеличивая его значение на 1.

Псевдо:

UPDATE captions set sort_order++ where category_id = ?

Каким образом я могу добиться этого?

Ответы [ 3 ]

0 голосов
/ 04 октября 2018
DECLARE
  v_sort_order NUMBER := 1;
BEGIN
  FOR i IN
  ( SELECT category_id FROM captions ORDER BY <column names>
  );
  LOOP
    UPDATE captions
    SET sort_order    = v_sort_order
    WHERE category_id = i.category_id;
    v_sort_order     := v_sort_order +1;
  END LOOP;
EXCEPTION
WHEN OTHERS THEN
  raise_application_error(-20501,'error'||SQLCODE||sqlerrm);
END;

Этот блок PL-SQL должен сработать.

FOR i IN (ВЫБРАТЬ category_id ИЗ ПОДПИСЕЙ ORDER BY);это выберет все ваши столбцы таблицы подписей.

В порядке по предложению замените фактическими именами столбцов, с которыми вы хотите отсортировать.Оператор update обновит все выбранные строки.

0 голосов
/ 04 октября 2018

Кроме того, вы можете использовать функцию окна ROW_NUMBER:

WITH caption_rn AS
(
    SELECT *, ROW_NUMBER() OVER (ORDER BY caption_id) AS rn
    FROM captions
)
UPDATE captions
SET sort_order = caption_rn.rn
FROM caption_rn
WHERE captions.caption_id = caption_rn.caption_id
0 голосов
/ 04 октября 2018

Вы можете использовать последовательность:

create sequence my_seq1;

UPDATE captions set sort_order = nextval('my_seq1') where category_id = ?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...