遇到sql触发器问题

时间:2010-01-08 04:52:05

标签: sql oracle triggers

目前我正在学习SQL并开始遇到某些触发器的问题。这是非常基本的,但我不知道如何解决它。

问题在于:我有两个表PersonBankAccountInfo。表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 个答案:

答案 0 :(得分:9)

这是Oracle吗?您只需使用父表的删除级联选项创建外键,Oracle将在删除此人时删除银行帐户信息:

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

否则,如果您仍想知道如何访问Oracle触发器中的行值,请使用:new和:old implicit cursors(对于delete trigger,:old.ID应该可以解决)。

有关约束的更多信息: http://download.oracle.com/docs/cd/B19306_01/appdev.102/b14251/adfns_constraints.htm#i1006974

答案 1 :(得分:3)

Pop使用ON DELETE CASCADE语法使其正确。但是,如果您确实想使用触发器,则语法为:

CREATE TRIGGER DELETEINFO
BEFORE DELETE ON Person
FOR EACH ROW
BEGIN
    DELETE BankAccountInfo where ID = :OLD.ID;
END;