ERROR al tratar de insertar con trigger
Publicado por Trillante (3 intervenciones) el 13/01/2018 13:18:18
Hola buenas. Soy nuevo aquí y vengo para preguntarles dónde se encuentra el error en el código (exact match returns..) ya que me estoy comiendo la cabeza y sigo sin encontrarlo. Resulta que el Trigger funciona con las dos primeras inserciones en la tabla Convocatoria pero en la tercera me devuelve el error que dejo abajo. Muchas gracias!
Log
El OID_AC está a null porque no he creado otra tabla, que no es necesaria para comprobar el correcto funcionamiento del trigger
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE TABLE ALUMNO_US(
OID_AL number(8) NOT NULL PRIMARY KEY,
dni CHAR(9) NOT NULL CHECK (LENGTH(dni)=9),
nombre VARCHAR2(50) ,
apellido VARCHAR2(50) ,
email VARCHAR2(50) check (email LIKE '%@%'),
telefono INTEGER,
fechaNacimiento DATE
);
CREATE TABLE CONVOCATORIA(
OID_CON number(8) NOT NULL PRIMARY KEY,
numero INTEGER NOT NULL,
tipo VARCHAR2(20) NOT NULL,
fechaApertura DATE,
fechaCierre DATE,
CONSTRAINT chk_fechaCierre check(fechaCierre > fechaApertura),
OID_AL number(8),
OID_AC number(8),
FOREIGN KEY (OID_AL) REFERENCES ALUMNO_US ON DELETE CASCADE,
FOREIGN KEY (OID_AC) REFERENCES ALUMNOSCONVOCATORIA ON DELETE CASCADE
);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
delete alumno_us;
delete convocatoria;
create or replace trigger fechaCon
after insert ON convocatoria
declare
fechaA number;
fechaC number;
begin
select extract(year from fechaApertura) into fechaA from convocatoria;
select extract(year from fechaCierre) into fechaC from convocatoria;
if (fechaC != fechaA + 1)
then raise_application_error (-20600, ' El año de la fecha de cierre de la convocatoria tiene que ser superior en una unidad al año de la fecha de cierre de dicha convocatoria');
end if;
end;
/
alter trigger fechaCon enable;
insert into alumno_us values ('1', '897453621', 'Paco', 'Burro', 'paco@gmail.com','786765123', to_date('03/03/1997','DD/MM/YYYY'));
insert into alumno_us values ('2', '897453621', 'Paco', 'Burro', 'paco@gmail.com','786765123', to_date('03/03/1998','DD/MM/YYYY'));
insert into alumno_us values ('3', '89745321', 'Paco', 'Burro', 'paco@gmail.com','786765123', to_date('03/03/1999','DD/MM/YYYY'));
insert into convocatoria values ('1', '78123', 'ERASMUS', to_date('09/12/1999','DD/MM/YYYY'),to_date('12/12/2001','DD/MM/YYYY'),'1', null);
insert into convocatoria values ('2', '78123', 'ERASMUS', to_date('11/12/1999','DD/MM/YYYY'),to_date('12/12/2000','DD/MM/YYYY'),'2', null);
insert into convocatoria values ('3', '78122', 'TRAINING', to_date('10/12/1995','DD/MM/YYYY'),to_date('12/12/2002','DD/MM/YYYY'),'3', null);
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
3 filas eliminado
0 filas eliminado
Trigger FECHACON compilado
Trigger FECHACON alterado.
1 fila insertadas.
1 fila insertadas.
1 fila insertadas.
Error que empieza en la línea: 22 del comando :
insert into convocatoria values ('1', '78123', 'ERASMUS', to_date('09/12/1999','DD/MM/YYYY'),to_date('12/12/2001','DD/MM/YYYY'),'1', null)
Informe de error -
ORA-20600: El año de la fecha de cierre de la convocatoria tiene que ser superior en una unidad al año de la fecha de cierre de dicha convocatoria
ORA-06512: at "PRUEBAS.FECHACON", line 9
ORA-04088: error during execution of trigger 'PRUEBAS.FECHACON'
1 fila insertadas.
Error que empieza en la línea: 24 del comando :
insert into convocatoria values ('3', '78122', 'TRAINING', to_date('10/12/1995','DD/MM/YYYY'),to_date('12/12/2002','DD/MM/YYYY'),'3', null)
Informe de error -
ORA-01422: exact fetch returns more than requested number of rows
ORA-06512: at "PRUEBAS.FECHACON", line 5
ORA-04088: error during execution of trigger 'PRUEBAS.FECHACON'
Valora esta pregunta
0