我是pl / sql的新手。我正在尝试创建一个在特定表中插入数据的触发器。 我有数据在我的桌子EV_48h上实时到达。要知道我必须在哪个表上插入数据,我必须知道它Ref_equip(Ref_equip在另一个名为C_Equip的表上)。 我已经迅速做出了这一点,以便更容易理解: merise
正如我所说,我有数据在EV_48H表上实时到达,我必须自动将它们放在名为'EVV _'+ Ref_equip的表中。
所以,这是我的代码。我没有任何错误,但它不起作用。我知道我错过了遗忘,但我不知道是什么。
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;
如果有人可以帮助我或让我走上正确的道路。我不知道我是否提供了所有信息,所以告诉我,如果我错过了什么。 谢谢
答案 0 :(得分:0)
在执行立即执行中,您在END之后缺少语句指示符冒号结束 这应该是
begin select clef_var into :New.Clef_Var From sivo.C_variable; end;
但是您应该注意其他设计选择: