Oracle - Analista

 
Vista:

Analista

Publicado por Martin (2 intervenciones) el 31/07/2006 19:34:10
Necesito verificar antes de hacer un Insert de los datos si uno de los campos del registro, por ejemplo Nombre y apellido se inserto anteriormente en otro registro, es decir si ya existe alguien con ese nombre no lo debe insertar. Como hacer un Trigger para evitar esto? es decir que se dispare before insert y que verifique dicha condicion.

Muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Analista

Publicado por Ricardo (84 intervenciones) el 01/08/2006 17:20:54
Prueba con esto:

create table mi_esquema.mi_pru1
(nom varchar2(30),
apellido varchar2(30));

create or replace trigger mi_esquema.trg_bi_mi_pru1
before insert
on mi_esquema.mi_pru1
referencing new as new old as old
for each row
declare
cursor c1 is
select 1 from mi_pru1 where nom = :new.nom;
r1 c1%rowtype;
e1 boolean;
begin
open c1;
fetch c1 into r1;
e1:=c1%found;
close c1;

if e1 then
raise_application_error(-20001,'Ya existe registro con nombre ' ||:new.nom );
end if;
end ;
/
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Analista

Publicado por Jesús de Diego (31 intervenciones) el 01/08/2006 18:53:25
Y digo yo....si al final vas a acabar lanzando una excepción...¿porque no poner una clave unica en el campo Nombre y dejar que Oracle haga el trabajo y te avise si se intenta violar la restricción?

Jesús de Diego
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Analista

Publicado por Martin (2 intervenciones) el 02/08/2006 19:29:57
Es cierto, lo voy a definir como UNIQUE y manejo la excepcion.

Muchas Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Analista

Publicado por JSL (186 intervenciones) el 02/08/2006 18:19:25
Como necesitas verificar si NOMBRE y APELLIDO ya fueron insertados, entoces pordriamos decir que NOMBRE y APELLIDO son unicos por lo que puedes hacer un indice unico

create unique index nomape_idx on tabla(nombre,apellido);

despues, en la insercion con manejo de exception haces todo, no necesitas un trigger y podriamos definir una tabla de repetidos

create table repetidos (nombre varchar2(10), apellido varchar2(10));

en tu codigo podrias hacer esto:

----

DECLARE
var_nombre VARCHAR2(10);
var_apellido VARCHAR2(10);
BEGIN -- begin (1)

FOR I IN ( SELECT ... FROM ... WHERE ...) LOOP
--- Instrucciones ....

BEGIN -- begin(2)
INSERT INTO TABLA (nombre, apellido, col1, col2, ..., coln)
VALUES (var_nombre, var_apellido, var_col1, var_col2, ..., var_coln);
EXCEPTION
WHEN DUP_VAL_ON_INDEX THEN
INSERT INTO REPETIDOS (nombre, apellido)
VALUES (var_nombre, var_apellido);
END; -- exception begin(2)

-- Instrucciones ...

END LOOP;
END; -- begin(1)


Espero sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar