Oracle - Ayuda para un trigger de validación de herencia en 3 tablas

   
Vista:

Ayuda para un trigger de validación de herencia en 3 tablas

Publicado por Pablo pablitobetiko@gmail.com (2 intervenciones) el 10/05/2015 03:23:25
Buenas.

Tengo un diseño de una base de datos que contiene una herencia a 3 tablas (una tabla llamada articulos es la tabla "padre" y las otras dos tablas que son el tipo de articulo, son sus hijos).
He creado un trigger para impedir que pueda insertar el identificador del articulo de la tabla padre (heredado a los hijos como PF) en las dos tablas a la vez. Este es el código de mi trigger:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
create or replace trigger t_pauxilios
before insert or update on pauxilios
for each row
declare
  v_articulo int;
begin
 
  select idarticulo into v_articulo
    from otros
    where idarticulo = :new.idarticulo;
 
  if v_articulo = :new.idarticulo then
    raise_application_error(-20001, 'Este articulo pertenece a la tabla otros');
  end if;
end;

Ahora, cuando voy a insertar un idarticulo en la tabla pauxilio (una de las tablas hija) no me deja si este idarticulo está ya en la tabla otros (la otra tabla hija), pero tampoco me deja aunque no esté, ya que existe un error de tipo no_data_found. Se que mi error reside en el select into, ya que si el idarticulo no está en la tabla otros mi select no saca ningún valor y el programa se rompe. Ahora bien, me gustaria saber si existe algún modo de rsolver esto ya que ami no se me ocurre nada.

un saludo y 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

Ayuda para un trigger de validación de herencia en 3 tablas

Publicado por Rafael (177 intervenciones) el 11/05/2015 09:48:45
Hola:

Deberas incluir el codigo para gestionar el error:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
create or replace trigger t_pauxilios
before insert or update on pauxilios
for each row
declare
  v_articulo int;
begin
  select idarticulo into v_articulo
    from otros
    where idarticulo = :new.idarticulo;
 
  if v_articulo = :new.idarticulo then
    raise_application_error(-20001, 'Este articulo pertenece a la tabla otros');
  end if;
 
EXCEPTION
    WHEN NO_DATA_FOUND THEN
        DBMS_OUTPUT.PUT_LINE ('No encontre registro');;
end;

Nos cuentas como te fue ???
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

Ayuda para un trigger de validación de herencia en 3 tablas

Publicado por Pablo (2 intervenciones) el 11/05/2015 17:01:32
El exception ya lo habia descartado porque no me salia con el, pero tras una segunda revision ya me sale, el error se controla y ya puedo volver a insertar lineas en las dos tablas mientras las PK no se repitan. Muchas gracias por la ayuda! :)
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