Возникли проблемы с триггерами SQL - PullRequest
0 голосов
/ 08 января 2010

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

Проблема в следующем: у меня есть две таблицы Person и BankAccountInfo. Таблица Person includes personal information. as identification number, name, birth date, etc. . The BankAccountInfo` содержит банковские данные для каждого человека в таблице Person.

Person (ID number (12) primary key
      , name varchar (60)
      , phone number 
      , ...)

BankAccountInfo (ID number (12) references Person
                 , bankaccount number (8) primary key
                 , ...)

То, что я хочу, это когда я удаляю человека, строка для этого человека также удаляется из таблицы BankAccountInfo, DELETE Person WHERE ID = 123456.

Проблема в том, что я не знаю, как информация поступает в триггер

CREATE 
TRIGGER DELETEINFO
BEFORE DELETE ON Person
BEGIN
DELETE BankAccountInfo where ID = ?????? <- What do i put here?
END;

Ответы [ 2 ]

9 голосов
/ 08 января 2010

Это Оракул? Вам просто нужно создать внешний ключ с опцией удаления каскада родительской таблицы, и Oracle позаботится об удалении информации о банковском счете при удалении человека:

CREATE TABLE BankAccountInfo (
ID number (12) references Person ON DELETE CASCADE,
bankaccount number (8) primary key, ...)

В противном случае, если вы все еще хотите знать, как получить доступ к значениям строк в триггерах Oracle, используйте: новые и: старые неявные курсоры (для триггера удаления: old.ID должен помочь).

Подробнее об ограничениях здесь: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_constraints.htm#i1006974

3 голосов
/ 08 января 2010

Поп имеет право с синтаксисом ON DELETE CASCADE Однако, если вы хотите использовать триггер, синтаксис:

CREATE TRIGGER DELETEINFO
BEFORE DELETE ON Person
FOR EACH ROW
BEGIN
    DELETE BankAccountInfo where ID = :OLD.ID;
END;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...