"ORA-04073: column list not valid for this trigger type" 创建触发器时出错
"ORA-04073: column list not valid for this trigger type" Error in Trigger creation
我想编写一个触发器,然后在 IDPRODUCT=3 或 IDPRODUCT=9 AND QUANTITY<10 时给出错误。如果此条件为真,则必须给出“请输入大于 10 的数量”。但它不起作用并给我错误。
这是我的触发器:此触发器用于在 table BB_BASKETITEM.
中插入期间进行检查
CREATE OR REPLACE TRIGGER User_defined_error
BEFORE INSERT OF IDPRODUCT,QUANTITYON BB_BASKETITEM
FOR EACH ROW
BEGIN
IF:NEW.IDPRODUCT=3 OR NEW.IDPRODUCT=9 AND NEW.QUANTITY<10 THEN
DBMS_OUTPUT.PUT_LINE(' Please enter quantity greater than 10. ');
END IF;
END;
/
错误:
Error report -
ORA-04073: column list not valid for this trigger type
04073. 00000 - "column list not valid for this trigger type"
*Cause: A column list was specified for a non-update trigger type.
*Action: Remove the column list.
正如 Oracle 所说:列列表对此触发器类型无效。省略就好了。
示例 table 和触发器:
SQL> create table bb_basketitem (idproduct number, quantity number);
Table created.
SQL> create or replace trigger user_defined_error
2 before insert on bb_basketitem
3 for each row
4 begin
5 if (:new.idproduct = 3 or :new.idproduct = 9)
6 and :new.quantity < 10
7 then
8 raise_application_error(-20000, 'Please enter quantity greater than 10.');
9 end if;
10 end;
11 /
Trigger created.
测试:
SQL> insert into bb_basketitem(idproduct, quantity) values (3, 5);
insert into bb_basketitem(idproduct, quantity) values (3, 5)
*
ERROR at line 1:
ORA-20000: Please enter quantity greater than 10.
ORA-06512: at "SCOTT.USER_DEFINED_ERROR", line 5
ORA-04088: error during execution of trigger 'SCOTT.USER_DEFINED_ERROR'
SQL> insert into bb_basketitem(idproduct, quantity) values (3, 20);
1 row created.
SQL>
列列表对 before update
触发器有意义:
SQL> create or replace trigger trg_bu_bbb
2 before update of quantity on bb_basketitem
3 for each row
4 begin
5 if (:new.idproduct = 3 or :new.idproduct = 9)
6 and :new.quantity < 10
7 then
8 raise_application_error(-20001, 'Please enter quantity greater than 10.');
9 end if;
10 end;
11 /
Trigger created.
SQL> update bb_basketitem set quantity = 1;
update bb_basketitem set quantity = 1
*
ERROR at line 1:
ORA-20001: Please enter quantity greater than 10.
ORA-06512: at "SCOTT.TRG_BU_BBB", line 5
ORA-04088: error during execution of trigger 'SCOTT.TRG_BU_BBB'
SQL>
我想编写一个触发器,然后在 IDPRODUCT=3 或 IDPRODUCT=9 AND QUANTITY<10 时给出错误。如果此条件为真,则必须给出“请输入大于 10 的数量”。但它不起作用并给我错误。 这是我的触发器:此触发器用于在 table BB_BASKETITEM.
中插入期间进行检查CREATE OR REPLACE TRIGGER User_defined_error
BEFORE INSERT OF IDPRODUCT,QUANTITYON BB_BASKETITEM
FOR EACH ROW
BEGIN
IF:NEW.IDPRODUCT=3 OR NEW.IDPRODUCT=9 AND NEW.QUANTITY<10 THEN
DBMS_OUTPUT.PUT_LINE(' Please enter quantity greater than 10. ');
END IF;
END;
/
错误:
Error report -
ORA-04073: column list not valid for this trigger type
04073. 00000 - "column list not valid for this trigger type"
*Cause: A column list was specified for a non-update trigger type.
*Action: Remove the column list.
正如 Oracle 所说:列列表对此触发器类型无效。省略就好了。
示例 table 和触发器:
SQL> create table bb_basketitem (idproduct number, quantity number);
Table created.
SQL> create or replace trigger user_defined_error
2 before insert on bb_basketitem
3 for each row
4 begin
5 if (:new.idproduct = 3 or :new.idproduct = 9)
6 and :new.quantity < 10
7 then
8 raise_application_error(-20000, 'Please enter quantity greater than 10.');
9 end if;
10 end;
11 /
Trigger created.
测试:
SQL> insert into bb_basketitem(idproduct, quantity) values (3, 5);
insert into bb_basketitem(idproduct, quantity) values (3, 5)
*
ERROR at line 1:
ORA-20000: Please enter quantity greater than 10.
ORA-06512: at "SCOTT.USER_DEFINED_ERROR", line 5
ORA-04088: error during execution of trigger 'SCOTT.USER_DEFINED_ERROR'
SQL> insert into bb_basketitem(idproduct, quantity) values (3, 20);
1 row created.
SQL>
列列表对 before update
触发器有意义:
SQL> create or replace trigger trg_bu_bbb
2 before update of quantity on bb_basketitem
3 for each row
4 begin
5 if (:new.idproduct = 3 or :new.idproduct = 9)
6 and :new.quantity < 10
7 then
8 raise_application_error(-20001, 'Please enter quantity greater than 10.');
9 end if;
10 end;
11 /
Trigger created.
SQL> update bb_basketitem set quantity = 1;
update bb_basketitem set quantity = 1
*
ERROR at line 1:
ORA-20001: Please enter quantity greater than 10.
ORA-06512: at "SCOTT.TRG_BU_BBB", line 5
ORA-04088: error during execution of trigger 'SCOTT.TRG_BU_BBB'
SQL>