[英]Trigger pl/sql insert data on table
i'm new in pl/sql. 我是pl / sql的新手。 I'm trying to create a trigger that insert datas in specific tables.
我正在尝试创建一个在特定表中插入数据的触发器。 I have datas that arrives in real-time on my table EV_48h.
我的数据实时到达我的表EV_48h。 To know on which table I have to insert the data i have to know it Ref_equip (Ref_equip is on an other table named C_Equip).
要知道我必须在哪个表上插入数据,我必须知道Ref_equip(Ref_equip在另一个名为C_Equip的表上)。 I've made quickly this littre merise to be more understandable: merise
我迅速做了这个Littré酒店merise更加理解: merise
As I said I have data that arrives on real-time on the table EV_48H and I have to put them automatically on the tables that are named 'EVV_'+Ref_equip. 就像我说的那样,我的数据是实时到达表EV_48H上的,我必须将它们自动放在名为“ EVV _” + Ref_equip的表上。
So, here is my code. 所以,这是我的代码。 I don't have any error but it don't work.
我没有任何错误,但是没有用。 I know i missed of forget something but i don't know what.
我知道我错过了忘记某事,但我不知道该怎么办。
TRIGGER "SIVO"."NEWtrigger3EV_48H"
BEFORE INSERT
ON SIVO.EV_48H
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
declare
clef_var number(4,0);
ref_equip varchar2(40);
V_Nom_table varchar2(1000) ;
V_nom_seq Varchar2(2000) ;
stmt varchar2(200);
begin
SELECT clef_var
INTO :New.Clef_Var
FROM sivo.c_variable
WHERE Ref_Var= :new.Ref_Var;
-- Conversion des formats Date-Heure en DateHeure oracle
:New.EV_DATEAUTO := to_date(:New.EV_DATE || ' ' || :New.EV_HEURE, 'DD/MM/YY HH24:MI:SS');
stmt:='begin select clef_var into :New.Clef_Var From sivo.C_variable; end';
EXECUTE IMMEDIATE stmt using out clef_var;
IF clef_var is not null then
stmt :='begin select Ref_equip into :New.Ref_Equip FROM sivo.C_Equip WHERE Ref_var= :New.Ref_Var; end';
EXECUTE IMMEDIATE Stmt USING OUT Ref_Equip;
V_nom_table := 'EVV_'||Ref_Equip;
stmt :='insert into' ||V_nom_table || '(:New.Clef_Var, :New.Ev_DateAuto, :New.Ev_Valeur )';
EXECUTE IMMEDIATE stmt USING Ref_Equip;
ELSE
INSERT INTO SIVO.EV_48H_VAR_INCONNUES (REF_VAR, EV_DATE, EV_HEURE, EV_VALEUR)
VALUES ( :New.REF_VAR, :New.EV_DATE, :New.EV_HEURE, :New.EV_VALEUR);
end if;
END;
If someone can help me or put me on the right way. 如果有人可以帮助我或以正确的方式帮助我。 I don't know if I give all informations so tell me if I missed something.
我不知道是否提供所有信息,所以告诉我是否错过了什么。 Thanks
谢谢
In your execute immediate you are missing the end of statement indicator colon after END this should be 在您的立即执行中,您缺少在END之后的语句指示符冒号结尾,这应该是
begin select clef_var into :New.Clef_Var From sivo.C_variable; end;
However there are other design choices that you should be aware of: 但是,您还应该注意其他设计选择:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.