SQL Oracle Trigger - PullRequest
       1

SQL Oracle Trigger

0 голосов
/ 24 февраля 2012

У меня проблема с простой триггерной командой. Эта триггерная операция вставит значение в таблицу address_rit , когда человек, обучающийся в RIT, будет вставлен в таблицу person . Вот синтаксис для команды триггера:

CREATE OR REPLACE TRIGGER addr
AFTER INSERT ON person
FOR EACH ROW
WHEN (NEW.college = 'RIT')
BEGIN
INSERT INTO address_rit (name, address, state) 
VALUES (NEW.name, NEW.address, (SELECT name FROM states WHERE NEW.statecode = states.statecode));
END;
/

Триггер скомпилирован, но с предупреждением. Однако дальнейшая проверка показывает, что триггер действительно имеет ошибку. Вот ошибка из компиляции.

PL/SQL: SQL Statement ignored   ERROR
PL/SQL: ORA-00984: column not allowed here  ERROR

Я почти уверен, что ошибка - просто синтаксическая ошибка, но я просто не могу найти решение. Дайте мне знать, если мне нужно добавить больше деталей. Большое спасибо за Вашу помощь.

1 Ответ

2 голосов
/ 24 февраля 2012

Как минимум, вам нужно двоеточие перед NEW

CREATE OR REPLACE TRIGGER addr
  AFTER INSERT ON person
  FOR EACH ROW
  WHEN (NEW.college = 'RIT')
BEGIN
  INSERT INTO address_rit (name, address, state) 
    VALUES (:NEW.name, 
            :NEW.address, 
            (SELECT name 
               FROM states 
              WHERE :NEW.statecode = states.statecode));
END;
/

Я также предполагаю, что запрос к таблице STATES всегда будет возвращать ровно 1 строку. Однако, если база данных должным образом нормализована, я ожидаю, что все таблицы будут иметь столбец STATECODE, а не STATE, и что между обоими PERSON и ADDRESS_RIT, которые ссылаются на *, будут внешние ключи 1010 * столбец в STATES. Но, если база данных должным образом нормализована, я также ожидал бы, что у вас не будет таблицы ADDRESS_RIT, которая дублирует данные в PERSON. Вместо этого ADDRESS_RIT действительно должно быть представлением таблицы PERSON.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...