Копировать — Вставить строки, используя MySQL INSERT INTO

У меня есть таблица, которая содержит много строк, упорядоченных по полю ‘seq’.
Я выбрал строки 6-9, и я хочу скопировать и вставить их, например, в строку 3.
Для этого я хотел бы создать SQL-запрос, который выполняет следующее:

INSERT INTO my_table ( seq, field1, field2.... )
SELECT seq, field1,field2..
FROM my_table
WHERE id IN ( 234, 233,232 )

(Поле id — это поле с автоматическим приращением, которое идентифицирует мои выбранные строки).

Теперь — мне удалось скопировать строки в таблицу.
Отсутствует правильное обновление поля ‘seq’ следующим образом:

  1. В вставленном месте (3) мои строки должны содержать значения 3,4,5.
  2. Все исходные строки в этом месте должны быть увеличены на 3, чтобы исходная строка (seq = 3) теперь стала (seq = 6), и все строки переместились на 3 строки вниз по таблице.

Можно ли это сделать с помощью SQL-запроса?

0

Решение

Вы можете создать триггер, который проверяет seq, если последовательность существует, он обновит порядковые номера над ней и сделает это.

create table s_sequence
(seq number(3),
name varchar2(2000)
);

create or replace trigger s_seq_order
before insert on s_sequence
for each row
declare
seq_exists varchar2(20);
begin
begin
select 1 into seq_exists from s_sequence where seq = :new.seq;
exception
when NO_DATA_FOUND then
null;
end;
if seq_exists = '1' then
update s_sequence set seq = seq + 1 where seq >= :new.seq;
end if;
end;

вставка (seq, name) с (1, ‘A’), (2, ‘B’) .. (5, ‘E’)

введите описание изображения здесь

Теперь вставьте (2, ‘F’)

введите описание изображения здесь

Но я не уверен, что это подходящий способ справиться с порядком.
но зачем ставить какие-либо данные в таблицу по порядку?

PS: этот код проверен в oracle,

0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector