SQL 删除触发器
SQL On Delete Trigger
我正在尝试创建一个触发器,当从 table 中删除一行时,它会插入另一个 table:
1 Create Or Replace Trigger cancel
2 After Delete
3 On OrderTable
4 For EACH ROW
5 Begin
6 Insert Into CancelledOrders Values (:old.acctNum, age, phone)
7 From OrderTable Natural Join Customer
8 Where acctid = :old.acctNum AND menuid = :old.menuNum;
9 End;
10 /
11 Show Errors;
我想抢 acctNum
、age
和 phone
。 acctNum
来自订单 table,但 age
和 phone
来自客户 table。因此,我加入了两个 tables(在 acctid
键上)。因此合并后的结果将如下所示:
acctNum Age Phone
我在尝试编译触发器时遇到此错误:
2/2 PL/SQL: SQL Statement ignored
3/2 PL/SQL: ORA-00933: SQL command not properly ended
有人知道这个问题吗?
编辑:
Table结构:
订单Table:AcctNum MenuNum startOrder endOrder
客户 Table:AcctNum age phone
您的插入语句不正确。您需要在表中指定要 select 的列。
将 select
子句添加到您的插入语句中。此外,删除 values
关键字并指定列名:
Insert Into CancelledOrders (acctNum, age, phone)
Select :old.acctNum, age, phone
From OrderTable Natural Join Customer
Where acctid = :old.acctNum AND menuid = :old.menuNum;
您正在混合用于不同事物的 values
and select
(subquery) syntax。您可以从使用来自 :old
伪记录的值和来自客户 table:
的值的查询中插入
Insert Into CancelledOrders -- (acctNum, age, phone)
Select :old.acctNum, age, phone
From Customer
Where acctNum = :old.acctNum;
最好将目标 table 中的列指定为插入子句的一部分(我已将其注释掉以防名称不同)。您也不希望(或不需要)重新查询触发器所针对的 table;您已经拥有所需的数据,并且在某些情况下会出现 mutating-table 错误。所以不需要加入。
我正在尝试创建一个触发器,当从 table 中删除一行时,它会插入另一个 table:
1 Create Or Replace Trigger cancel
2 After Delete
3 On OrderTable
4 For EACH ROW
5 Begin
6 Insert Into CancelledOrders Values (:old.acctNum, age, phone)
7 From OrderTable Natural Join Customer
8 Where acctid = :old.acctNum AND menuid = :old.menuNum;
9 End;
10 /
11 Show Errors;
我想抢 acctNum
、age
和 phone
。 acctNum
来自订单 table,但 age
和 phone
来自客户 table。因此,我加入了两个 tables(在 acctid
键上)。因此合并后的结果将如下所示:
acctNum Age Phone
我在尝试编译触发器时遇到此错误:
2/2 PL/SQL: SQL Statement ignored
3/2 PL/SQL: ORA-00933: SQL command not properly ended
有人知道这个问题吗?
编辑: Table结构:
订单Table:AcctNum MenuNum startOrder endOrder
客户 Table:AcctNum age phone
您的插入语句不正确。您需要在表中指定要 select 的列。
将 select
子句添加到您的插入语句中。此外,删除 values
关键字并指定列名:
Insert Into CancelledOrders (acctNum, age, phone)
Select :old.acctNum, age, phone
From OrderTable Natural Join Customer
Where acctid = :old.acctNum AND menuid = :old.menuNum;
您正在混合用于不同事物的 values
and select
(subquery) syntax。您可以从使用来自 :old
伪记录的值和来自客户 table:
Insert Into CancelledOrders -- (acctNum, age, phone)
Select :old.acctNum, age, phone
From Customer
Where acctNum = :old.acctNum;
最好将目标 table 中的列指定为插入子句的一部分(我已将其注释掉以防名称不同)。您也不希望(或不需要)重新查询触发器所针对的 table;您已经拥有所需的数据,并且在某些情况下会出现 mutating-table 错误。所以不需要加入。