У меня есть таблица, которая содержит много строк, упорядоченных по полю ‘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’ следующим образом:
Можно ли это сделать с помощью SQL-запроса?
Вы можете создать триггер, который проверяет 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
,
Других решений пока нет …