Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Oracle »

pbroblemas con una encuesta

Estas en el tema de pbroblemas con una encuesta en el foro de Oracle en Foros del Web. Buenas tardes. tengo una en cuesta cuyas tablas son las siguientes: create table PREGUNTAS ( PREGUNTA_ID NUMBER not null, PREGUNTA VARCHAR(200), ESTATUS VARCHAR(20), FECHA_ULT_MODIF TIMESTAMP, ...
  #1 (permalink)  
Antiguo 29/11/2007, 12:41
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
pbroblemas con una encuesta

Buenas tardes. tengo una en cuesta cuyas tablas son las siguientes:

create table PREGUNTAS (
PREGUNTA_ID NUMBER not null,
PREGUNTA VARCHAR(200),
ESTATUS VARCHAR(20),
FECHA_ULT_MODIF TIMESTAMP,
constraint PK_PREGUNTAS primary key (PREGUNTA_ID)
);

create table RESPUESTAS (
RESPUESTA_ID NUMBER not null,
PREGUNTA_ID NUMBER,
OPCION VARCHAR(200),
RESPUESTA NUMBER,
constraint PK_RESPUESTAS primary key (RESPUESTA_ID)
);
alter table RESPUESTAS
add constraint FK_RESPUEST_REFERENCE_PREGUNTA foreign key (PREGUNTA_ID)
references PREGUNTAS (PREGUNTA_ID);

las columnas ID tienen una secuencia que se ejecuta con el trigger:
-- Integrity package declaration
create or replace package IntegrityPackage AS
procedure InitNestLevel;
function GetNestLevel return number;
procedure NextNestLevel;
procedure PreviousNestLevel;
end IntegrityPackage;
/

-- Integrity package definition
create or replace package body IntegrityPackage AS
NestLevel number;

-- Procedure to initialize the trigger nest level
procedure InitNestLevel is
begin
NestLevel := 0;
end;


-- Function to return the trigger nest level
function GetNestLevel return number is
begin
if NestLevel is null then
NestLevel := 0;
end if;
return(NestLevel);
end;

-- Procedure to increase the trigger nest level
procedure NextNestLevel is
begin
if NestLevel is null then
NestLevel := 0;
end if;
NestLevel := NestLevel + 1;
end;

-- Procedure to decrease the trigger nest level
procedure PreviousNestLevel is
begin
NestLevel := NestLevel - 1;
end;

end IntegrityPackage;
/

/////////
-- Before insert trigger "TIB_PREGUNTAS" for table "PREGUNTAS"
create trigger TIB_PREGUNTAS before insert
on PREGUNTAS for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
dummy integer;
found boolean;

begin
-- Column "PREGUNTA_ID" uses sequence SEQUENCE_PREGUNTAS
select SEQUENCE_PREGUNTAS.NEXTVAL INTO :new.PREGUNTA_ID from dual;

-- Errors handling
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
/


-- Before insert trigger "TIB_RESPUESTAS" for table "RESPUESTAS"
create trigger TIB_RESPUESTAS before insert
on RESPUESTAS for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
dummy integer;
found boolean;

begin
-- Column "RESPUESTA_ID" uses sequence SEQUENCE_RESPUESTAS
select SEQUENCE_RESPUESTAS.NEXTVAL INTO :new.RESPUESTA_ID from dual;

-- Errors handling
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
/

Al ejecutar el SQL : INSERT INTO preguntas ( pregunta,estatus) VALUES('¿Qué país ganará la Copa Davis?','PENDIENTE')

obtengo el siguiente error: ORA-04098: el disparador 'ESQUEMA.TIB_PREGUNTAS' no es válido y ha fallado al revalidar

agradezco aquien pueda ayudarme con esto
  #2 (permalink)  
Antiguo 29/11/2007, 13:06
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: pbroblemas con una encuesta

Hola,

El trigger ESQUEMA.TIB_PREGUNTAS esta en estado invalido, es decir no compila, es decir tiene errores.

La secuencia SEQUENCE_PREGUNTAS existe?
Postea el error que devuelve Oracle cuando intenas compilar el trigger.


Saludos.

Última edición por matanga; 29/11/2007 a las 13:14
  #3 (permalink)  
Antiguo 29/11/2007, 13:12
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: pbroblemas con una encuesta

Hola,

Tambien veo un DECLARE, eso lo tienes que cambiar por BEGIN.

Cambiar esto..

Código:
-- Before insert trigger "TIB_PREGUNTAS" for table "PREGUNTAS"
create trigger TIB_PREGUNTAS before insert
on PREGUNTAS for each row
declare
integrity_error exception;
errno integer;
....
....
Por esto..

Código:
-- Before insert trigger "TIB_PREGUNTAS" for table "PREGUNTAS"
create trigger TIB_PREGUNTAS before insert
on PREGUNTAS for each row
BEGIN
integrity_error exception;
errno integer;
....
....
Saludos

ESTE POST ESTA MAL, IGNORARLO POR COMPLETO!!!!

Última edición por matanga; 29/11/2007 a las 13:48 Razón: ESTE POST ESTA MAL, IGNORARLO POR COMPLETO!!!!
  #4 (permalink)  
Antiguo 29/11/2007, 13:35
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: pbroblemas con una encuesta

gracias pur tu respuesta, entiendo lo que dices, pero eso me platea otras dudas: 1) dado que el código del trigger es autogenerado(por el power designer) que diferencia hay entre colocar el declare y el begin? 2) de ser eso por que con las otras tablas de la base de datos no he tenido ese problema? Yo creo que el problema debe ser otro, sin embargo voy a probar tu sugerencia a ver que pasa
  #5 (permalink)  
Antiguo 29/11/2007, 13:42
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: pbroblemas con una encuesta

Hola,

Ja, tienes razon, no vi el BEGIN mas adelante, despues de la declaracion de las variables.

Lo mejor que puedes hacer es ejecutar el comando para compilar el trigger y despues que te muestre si hay algun error de compilacion, si lo hay, sabras cual es el problema.

Código:
SQL> alter trigger TIB_PREGUNTAS compile;
SQL> show err
Saludos y mis disculpas por la confusion.
  #6 (permalink)  
Antiguo 30/11/2007, 04:05
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Re: pbroblemas con una encuesta

El DECLARE sobra, quitalo
  #7 (permalink)  
Antiguo 01/12/2007, 07:50
 
Fecha de Ingreso: noviembre-2007
Mensajes: 6
Antigüedad: 16 años, 5 meses
Puntos: 0
Re: pbroblemas con una encuesta

Gracias, pero no creo que sea el declare, es autogenerado además aun persiste mi problema, si alguien puede ayudarme lo agradecerá
  #8 (permalink)  
Antiguo 01/12/2007, 15:36
Avatar de matanga  
Fecha de Ingreso: octubre-2007
Ubicación: España
Mensajes: 1.091
Antigüedad: 16 años, 6 meses
Puntos: 85
Re: pbroblemas con una encuesta

Hola,

El problema es que el trigger esta en estado invalido, y por eso se genera el error cuando haces el insert, postea el error que devuelve Oracle cuando intentas compilarlo, en un post anterior he mencionado como hacerlo.

Tambien he ejecutado tu script completo y compila bien, excepto por la creacion de las secuencias que no esta publicado en tu post original, tambien funciona el insert sobre la tabla preguntas.

Saludos

Última edición por matanga; 01/12/2007 a las 15:45
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 17:32.