Oracle SQL: простая проблема запуска, влияющая на изменение значений в предложении if - PullRequest
1 голос
/ 05 декабря 2010

Я хочу создать триггер в таблице (называемый местом) с двумя атрибутами: номером места и классом места.Если место выше, чем, скажем, 50, класс должен быть «высоким», в противном случае он должен быть «низким».Я хочу, чтобы триггер автоматически давал класс, когда я ввожу число!

Посмотрите, что у меня есть до сих пор, попробовал также несколько альтернатив.новичок в кодировании баз данных, так что ... любая помощь будет отличной!

Ответы [ 2 ]

3 голосов
/ 05 декабря 2010

Помимо проблем с синтаксисом, которые уже описал Джонарл:

Если вы просто не играете с триггерами (или это какая-то домашняя работа), это не очень хороший дизайн.

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

Вы можете легко выбрать код_класса во время выбора, нет необходимости сохранять его:

SELECT seat_no, 
       CASE 
         WHEN seat_no > 50 THEN 'high'
         ELSE 'low'
       END as class_code
FROM seat;

С Oracle 11 вы даже можете определить виртуальный столбец, который будет автоматически выполнять «вычисления» во время поиска, в противном случае вы можете определить представление, которое будет возвращать эту информацию.

3 голосов
/ 05 декабря 2010

Измените «=» на «: =», поместите «/» в новую строку, измените «ПОСЛЕ» на «ДО» и измените «<= 50» на «> 50»:

CREATE OR REPLACE TRIGGER trigger_class
BEFORE INSERT OR UPDATE ON seat
FOR EACH ROW
BEGIN
IF :NEW.seat_no > 50 THEN :NEW.class_code :='high';
ELSE :NEW.class_code := 'low';
END IF;
END;
/
...