使用 'instead of delete' 创建触发器
Creating trigger with 'instead of delete'
我想将删除语句视为更新,但它会抛出此错误,我不知道这是什么意思。
create or replace trigger Miembros_V_IOD
instead of delete on Miembros_V
for each row
Begin
update Miembros set (end_date = sysdate)
where Miembros.nick = :old.nick
and Miembros.club = :old.club;
end;
LINE/COL ERROR
-------- ----------------------------------------------------------
2/4 PL/SQL: SQL Statement ignored
2/34 PL/SQL: ORA-00907: missing right parenthesis
错误指向 =
符号。您收到了一个 PL/SQL 错误 - 尽管是由内部 SQL 引起的 - 对于触发器,PL/SQL 错误中的行号从 DECLARE
开始(如果您有one) 或 BEGIN
,not 从整个 CREATE
语句开始。所以 2/34
指的是 PL/SQL 部分第二行的字符 34,即:
update Miembros set (end_date = sysdate)
... 即 =
.
(end_date = sysdate)
:
两边不应该有括号
create or replace trigger Miembros_V_IOD
instead of delete on Miembros_V
for each row
begin
update Miembros set end_date = sysdate
where Miembros.nick = :old.nick
and Miembros.club = :old.club;
end;
/
View MIEMBROS_V created.
语法图in the documentation显示括号可以围绕等号左侧的列列表,或右侧的子查询;但不是围绕整个 set
条款。因为你有 set (end_date
它期望接下来有逗号或右括号,即 set (end_date) = ...
- 因此 ORA-00907 在它没有看到时被抛出。
我想将删除语句视为更新,但它会抛出此错误,我不知道这是什么意思。
create or replace trigger Miembros_V_IOD
instead of delete on Miembros_V
for each row
Begin
update Miembros set (end_date = sysdate)
where Miembros.nick = :old.nick
and Miembros.club = :old.club;
end;
LINE/COL ERROR
-------- ----------------------------------------------------------
2/4 PL/SQL: SQL Statement ignored
2/34 PL/SQL: ORA-00907: missing right parenthesis
错误指向 =
符号。您收到了一个 PL/SQL 错误 - 尽管是由内部 SQL 引起的 - 对于触发器,PL/SQL 错误中的行号从 DECLARE
开始(如果您有one) 或 BEGIN
,not 从整个 CREATE
语句开始。所以 2/34
指的是 PL/SQL 部分第二行的字符 34,即:
update Miembros set (end_date = sysdate)
... 即 =
.
(end_date = sysdate)
:
create or replace trigger Miembros_V_IOD
instead of delete on Miembros_V
for each row
begin
update Miembros set end_date = sysdate
where Miembros.nick = :old.nick
and Miembros.club = :old.club;
end;
/
View MIEMBROS_V created.
语法图in the documentation显示括号可以围绕等号左侧的列列表,或右侧的子查询;但不是围绕整个 set
条款。因为你有 set (end_date
它期望接下来有逗号或右括号,即 set (end_date) = ...
- 因此 ORA-00907 在它没有看到时被抛出。