트리거를 사용하여 테이블 sancion에 행을 삽입하려고하지만 삽입 후 빈 상태로 남아 있습니다.오라클 삽입 트리거
첫 번째 참조 된 테이블 :
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' 조건이 충족되면 작동합니다. 예외가 있다는 사실을 생략하거나 언급하지 않은 것을 잊어 버리는 경우를 제외하고 트리거가 실행되고'SANCION'에 행이 삽입됩니다. –