在两列中添加值不适用于PL / SQL ORACLE

时间:2017-11-21 22:51:58

标签: oracle plsql triggers

所以我试图用价格添加年龄并将结果存储在另一个表中,其中包含执行此操作的人员的ID。我可以通过触发来设置业务规则但是当我检查我的第二个(END)表时,那里什么也没有。这是我的触发器代码:

CREATE OR REPLACE TRIGGER JIM 
    BEFORE INSERT ON END 
    FOR EACH ROW ENABLE
DECLARE
    V_AGE JIM.AGE%TYPE;
    V_PRICE JIM.PRICE%TYPE;
    v_prices NUMBER(20);
BEGIN
    SELECT AGE,PRICE INTO V_AGE,V_PRICE FROM JIM WHERE ID=:NEW.ID;
    v_prices:=V_AGE+V_PRICE;
    INSERT INTO END VALUES(:new.ID,v_prices);
END;

但是,当我使用以下代码将值插入JIM表时:

insert into jim values(4,'Sim',45,100);

实际上没有任何内容存储在END表中。我对触发器有点新意,令人困惑。请让我知道该怎么做。 thanls

2 个答案:

答案 0 :(得分:0)

如果只有一个表格,则SELECTINSERT是多余的。

CREATE OR REPLACE TRIGGER trigger_name 
BEFORE INSERT ON table_name 
FOR EACH ROW
BEGIN
  :NEW.PRICES := :NEW.AGE + :NEW.PRICE;
END;

Possible duplicate

答案 1 :(得分:0)

  • 不要使用关键字end作为表名,这会导致问题 创建触发器。我假设该表的名称为t_end

  • 我认为您对哪个表定义触发器感到困惑。它似乎 您应该在表jim而不是t_end上定义。

  • 我假设你有一个名为seq_end的序列来填充id 表格t_end

  • 的列
  

因此,您的触发器创建语句将如下所示:

create or replace trigger trg_ins_jim before insert on jim for each row
declare
     v_id_end t_end.id%type;
     v_prices t_end.prices%type;
begin
   v_prices := :new.age + :new.price;
   v_id_end :=  seq_end.nextval; insert into t_end values(v_id_end, v_prices);
   /* if you have defined sequence for t_end as default value of id column, you may change the upper row as "insert into t_end(prices) values(v_prices);" and there would be no need for "v_id_end" */
end;

当您发出insert into jim values(4,'Sim',45,100);命令时,您还会在t_end中插入值。