目前我正在学习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;
答案 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;