¿Puedes chequear este código para saber por que el oracle me arroja un mensaje de error?

Quisiera preguntarte si puedes chequear este código a ver si algo anda mal, porque oracle me arroja el mensaje de error cuando no se cumplen las condiciones.. Fino!.. Pero cuando si se cumplen. Igual me lo arroja!.. Aquí mando una tabla y el código a ver si me puedes ayudar a encontrar el error.. Y gracias!
create table lugar_table (
lug_pk_lugar number (10) not null,
lug_nm_lugar varchar2 (100) not null,
lug_tp_lugar varchar2 (10) not null,
lug_fk_lugar number (10) null,
constraint lugar_pk primary key (lug_pk_lugar),
constraint lug_tp_lugar_ch check (lug_tp_lugar in('Continente','Reino','Pais','Estado','Ciudad')) );
create or replace trigger lego.valida_tipo_lugar
before insert or update
on lego.lugar_table
referencing new as new old as old
for each row
declare
begin
if(:new.lug_tp_lugar<>'Continente' or :new.lug_tp_lugar<>'Reino' or :new.lug_tp_lugar<>'Pais' or :new.lug_tp_lugar<>'Estado') then
raise_aplication_error(-20053,'el tio de lugar no es valido');
end if;
end valida_tipo_lugar;

1 respuesta

Respuesta
1
Dime que numero de error ORA te da oracle, y si lo da al generar la tabla o al crear el trigger, o bien si lo da en ejecución.
Según la escribes ahí, la sentencia de creación de tabla no es correcta, no se pueden meter las constraints junto con los campos de la tabla. Primero crea la tabla y luego añade las constraints con ALTER TABLE <tabla> ADD CONSTRAINT.
De todas formas, dime que numero de error te da y en que momento, y te ayudaré mejor.
al hacer insert into lugar_table_values (1,´China´,´Pais´,null);
Me arroja ora-20053 :el tipo de lugar no es válido
ora-06512: en "lego.valida_tipo_lugar", linea 4
ora-04088: error durante la ejecucuion del disparador ´lego. valida_tipo_lugar´
Ya esta claro. El problema es la condición
if(:new.lug_tp_lugar<>'Continente' or :new.lug_tp_lugar<>'Reino' or :new.lug_tp_lugar<>'Pais' or :new.lug_tp_lugar<>'Estado') then
Es un OR que se va a cumplir siempre, siempre devolverá error, porque cualquier cosa que metas, incluso "País" o "Reino", será distinto de "país" o distinto de "reino" porque no puede ser igual a las cuatro cosas. No se mi me explico, creo que no.
Tu problema se resolverá si cambias los OR de la condición por AND. Entonces solo te dará error si lo que escribes no es ninguno de los 4 tipos de lugares que has definido.
Cambia OR por AND en toda la condición, y funcionará.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas