如何在触发器体中使用table的属性

时间:2015-12-31 09:50:29

标签: oracle plsql

create or replace trigger calculation

before insert on booking 

DECLARE name varchar2(20);

BEGIN 

IF INSERTING THEN

select first_name into name from CUSTOMER where NIC =: NEW.NIC ;

dbms_output.put_line(name);

END IF;

end;

这里NEW.NIC是预订表的属性。

它给了我以下错误:

  

错误:PLS-00801:内部错误[ph2csql_strdef_to_diana:bind]错误:   PLS-00801:内部错误[phdite:node kind]错误(4,1):PL / SQL:SQL   语句被忽略错误(4,35):PL / SQL:ORA-06544:PL / SQL:内部   错误,参数:[ph2csql_strdef_to_diana:bind],[],[],[],[],[],   [],[]错误(5,1):PL / SQL:忽略语句

2 个答案:

答案 0 :(得分:1)

假设您使用的是行级触发器,请使用:NEW.col引用该列,例如:

CREATE OR REPLACE TRIGGER calculation before
  INSERT ON booking 
  FOR EACH ROW
  DECLARE 
  name VARCHAR2(20);
  BEGIN
    IF INSERTING THEN
      SELECT first_name INTO name FROM CUSTOMER WHERE NIC =:NEW.NIC ;
      dbms_output.put_line(name);
    END IF;
  END;

答案 1 :(得分:0)

你有NIC =: NEW.NIC ; 而它应该是 NIC =:NEW.NIC ;

注意删除 =: 后的空格。