所以我试图用价格添加年龄并将结果存储在另一个表中,其中包含执行此操作的人员的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
答案 0 :(得分:0)
如果只有一个表格,则SELECT
和INSERT
是多余的。
CREATE OR REPLACE TRIGGER trigger_name
BEFORE INSERT ON table_name
FOR EACH ROW
BEGIN
:NEW.PRICES := :NEW.AGE + :NEW.PRICE;
END;
答案 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
中插入值。