Sql: запретить обновление, если значение поля ниже определенного значения

Я хотел бы добавить ограничение в свою таблицу:

create table asset (
   id number(19,0) not null,
    name varchar2(255 char),
    description varchar2(255 char),
    type varchar2(255 char),
    height number(10,0),
    width number(10,0),
    bytes blob,
    primary key (id)
);

после сохранения на нем Assets с ID от 0 до 8:

ALTER TABLE ASSET ADD CONSTRAINT check_if_id_bigger_than_eight CHECK (ID > 8)

чтобы избежать дальнейших модификаций строк с идентификаторами от 0 до 8, к сожалению, вышеизложенное не работает, потому что не разрешено иметь данные, которые нарушают ограничения, есть ли простой способ сделать это?

Вам нужно сделать это через триггер. Ограничение касается значений в строке. Это не флаг «да/нет» относительно возможности обновления значений.

Gordon Linoff 20.03.2019 17:12

H2 поддерживает только триггеры, написанные на Java. Вы не можете определить их в SQL

a_horse_with_no_name 21.03.2019 12:50
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
2
319
1

Ответы 1

Этот триггер может работать (синтаксис сервера sql)

create trigger TR_8 
on asset
after insert, update

as
if exists(
 select * -- checks if new or modified datum has id between 0 and 8
 from inserted 
 where inserted.id between 0 and 8
)
begin
 RAISERROR ('Ids between 0 and 8 must stay untouched', 16, 10); --if so, rollback the transaction giving an error
 rollback transaction
end

Спасибо, это на самом деле не работает на H2, вы знаете, как исправить синтаксис для H2?

mattobob 21.03.2019 10:41

Извините, я никогда не использовал H2. В любом случае, я предлагаю вам добавить тег H2 к вашему вопросу.

DDS 21.03.2019 12:43

Другие вопросы по теме