トリガーを使用してテーブルsancionに行を挿入したいが、挿入後は空のままである。Oracle挿入トリガー
最初に参照テーブル:
CREATE TABLE OBSERVACION(
carretera_foto VARCHAR2(5),
pto_km_radar NUMBER(3,0),
sentido_radar VARCHAR2(3),
fecha_foto VARCHAR2(10),
hora_foto TIMESTAMP(6),
velocidad_foto NUMBER(3,0),
limit_vel_radar NUMBER(3,0),
coche VARCHAR2(7),
CONSTRAINT observacion_pk PRIMARY KEY(fecha_foto, hora_foto, coche),
CONSTRAINT observacion_fk FOREIGN KEY (carretera_foto,pto_km_radar, sentido_radar) REFERENCES Radar (carretera_foto, pto_km_radar, sentido_radar),
CONSTRAINT observacion_matricula_fk FOREIGN KEY(coche) REFERENCES Vehiculo (matricula) ON DELETE SET NULL
);
挿入:
は`INSERT INTO OBSERVACION(carretera_foto, pto_km_radar, sentido_radar, fecha_foto, hora_foto, velocidad_foto,limit_vel_radar, coche)
SELECT distinct carretera_foto, pto_km_radar, sentido_radar, TO_DATE(fecha_foto, 'YYYY-MM-DD'), hora_foto, velocidad_foto, limit_vel_radar, matricula
FROM gotcha;`
は、他のテーブル(私はトリガーがここに挿入する):
CREATE TABLE SANCION(
importe NUMBER(3,0),
fecha_foto VARCHAR2(10),
hora_foto TIMESTAMP(6),
coche VARCHAR2(7),
tipo VARCHAR2(5),
NIFdueno VARCHAR2(35),
CONSTRAINT sancion_pk PRIMARY KEY(fecha_foto, hora_foto, coche, tipo),
CONSTRAINT sancion_duenio_fk FOREIGN KEY (NIFdueno) REFERENCES Persona (NIFpersona),
CONSTRAINT sancion_observacion_fk FOREIGN KEY (fecha_foto, hora_foto, coche) REFERENCES Observacion (fecha_foto, hora_foto, coche)
);
トリガー:
CREATE TRIGGER VELOCIDAD
AFTER INSERT ON OBSERVACION FOR EACH ROW
WHEN(NEW.velocidad_foto > NEW.limit_vel_radar)
DECLARE
importe_multa NUMBER(3,0);
BEGIN
importe_multa =(:NEW.velocidad_foto - :NEW.limit_vel_radar)*10;
INSERT INTO SANCION(importe, fecha_foto, hora_foto, coche, tipo)
VALUES
(importe_multa, :NEW.fecha_foto, :NEW.hora_foto, :NEW.coche, '1');
END;
落とし穴テーブル:
CREATE TABLE gotcha (
matricula VARCHAR2(7),
VIN VARCHAR2(17),
marca VARCHAR2(10),
modelo VARCHAR2(12),
potencia VARCHAR2(6),
color VARCHAR2(25),
fecha_matricula VARCHAR2(10),
fecha_ITV VARCHAR2(10),
nombre_dueno VARCHAR2(35),
apell_1_dueno VARCHAR2(15),
apell_2_dueno VARCHAR2(15),
direcc_dueno VARCHAR2(42),
ciudad_dueno VARCHAR2(35),
tlf_dueno VARCHAR2(9),
email_dueno VARCHAR2(50),
cumple_dueno VARCHAR2(10),
NIF_dueno VARCHAR2(9),
nombre_condtr VARCHAR2(35),
apell_1_condtr VARCHAR2(15),
apell_2_condtr VARCHAR2(15),
direcc_condtr VARCHAR2(42),
ciudad_condtr VARCHAR2(35),
tlf_condtr VARCHAR2(9),
email_condtr VARCHAR2(50),
cumple_condtr VARCHAR2(10),
NIF_condtr VARCHAR2(9),
carnet_condtr VARCHAR2(3),
fecha_carnet VARCHAR2(10),
edad_condtr NUMBER(2,0),
carretera_foto VARCHAR2(5),
limit_vel_ctera NUMBER(3,0),
pto_km_radar NUMBER(3,0),
sentido_radar VARCHAR2(3),
limit_vel_radar NUMBER(3,0),
fecha_foto VARCHAR2(10),
hora_foto VARCHAR2(12),
velocidad_foto NUMBER(3,0)
);
助けてください。
あなたはOBSERVACION' 'に挿入しているが、我々は見当がつかない'GOTCHA'テーブルには何が入っていますか?挿入されている行のいずれかがトリガーで宣言された 'WHEN'条件を満たすかどうかはわかりません。 –
Gotchaテーブルのフォーマットはこれです。またWHENの条件は約25000回にも及ぶ。 – Nausikaa
@NNauskaa - 私たちのマシンで見て実行できるテストケースを投稿します。 'WHEN'条件が満たされると、Oracleトリガーが起動します。例外があるという事実を省略している場合や、コミットすることを忘れている場合や、言及していないことを忘れている場合を除き、トリガは発動し、行は「SANCION」に挿入されます –