0
CREATE OR REPLACE TRIGGER sales_trig1 
    before insert on Inventory1 
    for each row
DECLARE
    q Inventory1.qty%type; 
    id Inventory1.item_id%type;
    si Sales.sitem_id%type; 
    tid Sales.trans_id%type; 
    td Sales.trans_dt%type; 
    tq Sales.trans_qty%type;
BEGIN
    tid:='t_id111';  
    si:='&si';  
    tq:=&tq;
    select item_id,qty 
    into id,q 
    from Inventory1 
    where id=si; 
    IF tq<=q THEN 
       insert into Sales 
       values(tid,si,date,tq); 
       q:=q-tq; 
    END IF;    
EXCEPTION 
    WHEN no_data_found THEN 
         dbms_output.put_line('EXCEPTION: Invalid item_id');

END;

错误如下

Errors for TRIGGER SALES_TRIG1:
-
LINE/COL ERROR
-------- ----------------------------------------------------------------- 
17/1     PL/SQL: SQL Statement ignored
17/33   PL/SQL: ORA-00936: missing expression
4

1 回答 1

0

如果您想从新插入的行中获取和更改值,请使用:NEW.<column_name>来处理新值。

以下是它如何适用于您的案例:

CREATE OR REPLACE TRIGGER sales_trig1 
  before insert on Inventory1 
    for each row
DECLARE
  q Inventory1.qty%type; 
  id Inventory1.item_id%type;
  si Sales.sitem_id%type; 
  tid Sales.trans_id%type; 
  td Sales.trans_dt%type; 
  tq Sales.trans_qty%type;
BEGIN
  tid :='t_id111';  
  si  := :NEW.sytem_id;  
  tq  := :NEW.trans_dt;
  select item_id, qty into id, q from Inventory1 where id = si; 
  IF tq <= q THEN 
    -- insert in another table
    insert into Sales values(tid, si, sysdate, tq); 
    -- here change inserted value
    :NEW.qty := q - tq; 
  END IF;    
EXCEPTION 
  WHEN no_data_found THEN 
     dbms_output.put_line('EXCEPTION: Invalid item_id');

END;
/
于 2017-03-17T08:14:55.047 回答