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

Trigger En Oracle

Estas en el tema de Trigger En Oracle en el foro de Oracle en Foros del Web. hola amigos soy nuevo en esta web me parece super insteresante espero que me ayuden, el nombre de mi post es igual a uno que ...
  #1 (permalink)  
Antiguo 27/02/2007, 12:08
 
Fecha de Ingreso: febrero-2007
Ubicación: Ecuador
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Trigger En Oracle

hola amigos soy nuevo en esta web me parece super insteresante espero que me ayuden, el nombre de mi post es igual a uno que encontre en esta misma web pero el problema es un poquito mejor :

sucede que estoy haciendo una pequeña bdd en oracle (por lo general uso sqlserber y mysql pero ya me toco oracle ni modo ) tiene 3 tablas

SQL> create table Estudiante(
2 Cod Integer,
3 Nombre VaINSEENrchar(10)
4 );

Table created.

SQL> ALTER TABLE Wily.Estudiante ADD(
2 Primary key
3 (Cod));

Table altered.

SQL> create table Materias(
2 CodM Integer,
3 NombreM Varchar(10));

Table created.

SQL> alter table wily.Materias add(
2 primary key
3 (CodM));

Table altered.

create table Nota(
2 codE integer,
3 codM integer,
4 Nota1 float DEFAULT 0,
5 Nota2 float DEFAULT 0,
6 Nota3 float DEFAULT 0,
7 Promedio float DEFAULT 0,
8 Mensaje Varchar(10) Default 'Reprobado');

Table created.

SQL> alter table Wily.Nota add(
2 CONSTRAINT FK_REFER
3 FOREIGN KEY (codE)
4 REFERENCES Wily.Estudiante (cod));

Table altered.


este es mi trigger

CREATE OR REPLACE TRIGGER calc_Aprobado

before INSERT OR UPDATE ON wily.Nota
FOR EACH ROW
DECLARE
v_ins_sum_notas float;

BEGIN
IF INSERTING THEN
IF :new.nota1 <> 0 and :new.nota2 <> 0 :new.nota3 <> 0 THEN
v_ins_sum_notas := (:new. nota1 + :new. nota2 + :new. Nota3);

IF v_ins_sum_notas >= 21 THEN
:new.Promedio:= v_ins_sum_notas /3;
:new.MENSAJE := 'APROBADO';
ELSIF (v_ins_sum_notas < 21)

:new.Promedio:= v_ins_sum_notas /3;
:new.MENSAJE := ' NO APROBADO';
END IF;
END IF;
END IF;
end;


diagnme cual es el problema
  #2 (permalink)  
Antiguo 27/02/2007, 15:58
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Trigger En Oracle

no le veo nada raro al trigguer, tal vez si posteras el error que te manda seria mas facil
__________________
Blogzote.com :-) Mi blog
  #3 (permalink)  
Antiguo 28/02/2007, 17:36
 
Fecha de Ingreso: febrero-2007
Ubicación: Ecuador
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Trigger En Oracle

mira ya creo el trigger pero me envia un mensaje que dice algo asi
trigger creado pero con errores
luego intento ingresar algunos datos a la tabla Nota
pero no me permite y me envia otro error
que me dice error al compilar

gracias por su ayuda
  #4 (permalink)  
Antiguo 28/02/2007, 19:25
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
Re: Trigger En Oracle

ok entonces si tiene algo mal el trigguer, supongo que estas usando sql*plus, entonces cuendo crees el trigguer y te mande ese mensaje dale

>show errors

con esto te muestra el error que tiene el trigguer
__________________
Blogzote.com :-) Mi blog
  #5 (permalink)  
Antiguo 07/03/2007, 11:28
 
Fecha de Ingreso: febrero-2007
Ubicación: Ecuador
Mensajes: 23
Antigüedad: 17 años, 2 meses
Puntos: 0
Re: Trigger En Oracle

Hola si estuve ocupando sqlplus pero mejor instale toad y bueno ya resolvi el problema aqui esta la BDD y el trigger por si algun navegante lo nesecita



--*********************************PRACTICA SQL MODELO ESCUELA : ESTUDIANTES , MATERIA , NOTA********
/* ENUNCIADO:
Crear una base de datos que tenga 3 tablas estudiantes , materias, Notas (nota1, nota2, nota3) (y una tabla mensaje es opcional )
controlar la integridad ) crear un trigger que controle que cada vez que se asiente las notas
se sumen las 3 notas parciales en la tabla Nota y guarde el resultado en la BDD , ademas crear
un triger que permita ingresar automaticamente "aprobado" o "no aprobado" esto depende de las
notas parciales en NOTA*/


/* CREADO POR : RICARDO RUANO
UNIVERSIDAD TECNICA DEL NORTE
ESCUELA DE INGENIERIA EN SISTEMAS COMPUTACIONALES
IBARRA - ECUADOR
[email protected]
*/

create table Estudiante
(
Codigo Integer,
Nombre Varchar(10)
)

alter table Estudiante
add(Primary Key (Codigo))

create table Materias(
CodigoM Integer,
NombreM Varchar(10))

alter table Materias
add (primary Key (CodigoM))


CREATE TABLE NOTA
(
CODIGONOTA INTEGER,
CODIGOE INTEGER,
CODIGOM INTEGER,
NOTA1 FLOAT DEFAULT 0,
NOTA2 FLOAT DEFAULT 0,
NOTA3 FLOAT DEFAULT 0
)

ALTER TABLE NOTA ADD (
CONSTRAINT FK_REFER_EST
FOREIGN KEY (CODIGOE)
REFERENCES ESTUDIANTE (CODIGO))

ALTER TABLE NOTA ADD (
CONSTRAINT FK_REFER_MAT
FOREIGN KEY (CODIGOM)
REFERENCES MATERIAS (CODIGOM))

ALTER TABLE NOTA ADD(
PRIMARY KEY (CODIGONOTA))

create table Mensaje
(
codigoNota INTEGER,
Suma float default 0,
Mens varchar(10) default 'Reprobado'
)

ALTER TABLE MENSAJE ADD
(PRIMARY KEY (CODIGONOTA))

ALTER TABLE MENSAJE ADD
( CONSTRAINT FK_REFER_NOT
FOREIGN KEY (codigoNota)
REFERENCES NOTA (CODIGONOTA))



CREATE OR REPLACE TRIGGER "calc_Aprobado"

AFTER INSERT OR UPDATE ON NOTA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
--VARIABLES LOCALES
--sumatoria de las notas
v_ins_sum_notas float;
v_promedio float;

BEGIN
--***1)SI ES INSERCION DE DATOS***
IF INSERTING THEN
--comprobar primero si hay las tres notas a sumar
IF :new.nota1 is not null and :new.nota2 is not null and :new.nota3 is not null THEN
--sumar las 3 primeras notas sin supletorio
v_ins_sum_notas := (:new.nota1 + :new.nota2 + :new.nota3);

--comprobar si es mayor o igual a 21 si es asi APROBADO)
IF v_ins_sum_notas >= 21 THEN
--entonces poner APROBADO
v_promedio :=v_ins_sum_notas/3;
INSERT INTO MENSAJE VALUES (:NEW.CODIGONOTA,v_promedio,'APROBADO');

--DE LO CONTRARIO
ELSIF v_ins_sum_notas < 21 THEN
v_promedio :=v_ins_sum_notas/3;
INSERT INTO MENSAJE VALUES (:NEW.CODIGONOTA,v_promedio,'NOAPROBAD');
END IF;
END IF;
END IF;

--***2)SI ES ACTUALIZACION DE DATOS***
IF UPDATING THEN
--comprobar primero si hay las tres notas a sumar
IF :new.nota1 is not null and :new.nota2 is not null and :new.nota3 is not null THEN
--sumar las 3 primeras notas sin supletorio
v_ins_sum_notas := (:new.nota1 + :new.nota2 + :new.nota3);

--comprobar si es mayor o igual a 21 si es asi APROBADO)
IF v_ins_sum_notas >= 21 THEN
--entonces poner APROBADO
v_promedio :=v_ins_sum_notas/3;
UPDATE MENSAJE SET SUMA= v_promedio ,mens='APROBADO' where codigoNota = :new.codigonota;

--DE LO CONTRARIO
ELSIF v_ins_sum_notas < 21 THEN
v_promedio :=v_ins_sum_notas/3;
UPDATE MENSAJE SET SUMA= v_promedio ,mens='NOAPROBAD' where codigoNota = :new.codigonota;
END IF;
END IF;
END IF;

END;

insert into Nota (CODIGONOTA,CodigoE, CodigoM,Nota1, Nota2,Nota3) values (1,1,2,10,9,7)
insert into Nota (CODIGONOTA,CodigoE, CodigoM,Nota1, Nota2,Nota3) values (2,1,3,10,9,7)
insert into Nota (CODIGONOTA,CodigoE, CodigoM,Nota1, Nota2,Nota3) values (3,1,1,3,6,4)
UPDATE NOTA SET NOTA1= 3,NOTA2=3 WHERE CODIGONOTA = 2
SELECT * FROM nota
SELECT * FROM MENSAJE
  #6 (permalink)  
Antiguo 04/01/2012, 00:02
 
Fecha de Ingreso: enero-2012
Mensajes: 1
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: Trigger En Oracle

HEY!! OIE XFA UNA AYUDA!!!!!! NOSE MUCHO DE ORACLE LO ACABO DE INSTALAR Y TNGO UN TRABAJO QUE HACER QU ES ALGO PARECIDO AL TUYO SE TRATA DDE VALIDAR SI LA NOTA ESTA ENTRE 0 Y 20 E INGRESARLA CASO CONTRARIO MUESTRE UN MENSAJE DE ERROR Y NO LA INGRESE LO ISE EN SQL PERO EN ORACLE TNGO DIFICUKTADES... NOSE SI M PODRIAS AYUDAR
mi codigo asta el moemnto es este

CREATE TABLE TALUMNO
(
CodAlumno varchar(4)primary key,
NomAlumno varchar(50),
DirAlumno varchar(50)
)
CREATE TABLE TASIGNATURA
(
CodAsig varchar(4)primary key,
NomAsi varchar(50),
creditos int
)
CREATE TABLE TNOTA
(
CodNota varchar(4)primary key,
Nota decimal(10,2),
Observacion varchar(30),
CodAsig varchar(4),foreign key (CodAsig) references TASIGNATURA
)

BEGIN
INSERT INTO TALUMNO VALUES('A001','JUAN PEREZ','URB LAS LOMAS');
INSERT INTO TALUMNO VALUES('A002','ANGEL SOCUALAYA MOLINA','SAN SEBASTIAN D9B');
INSERT INTO TALUMNO VALUES('A003','CABALLO PRIMO TIRO AL BLANCO','HIPRODOMO DE MONTERICO');
END;
BEGIN
INSERT INTO TASIGNATURA VALUES('AS01','LABORATORIO DE BD 2',4);
INSERT INTO TASIGNATURA VALUES('AS02','LABORATORIO DE PROGRAMACION',5);
INSERT INTO TASIGNATURA VALUES('AS03','INGENIERIA DE LA INFORMACION',4);
END;
SELECT *FROM TALUMNO
SELECT *FROM TASIGNATURA
SELECT *FROM TNOTA


CREATE OR REPLACE TRIGGER TR_VALIDA
AFTER INSERT OR UPDATE ON TNOTA
REFERENCING NEW AS NEW OLD AS OLD
FOR EACH ROW
DECLARE
v_nota decimal(10,2);
v_obs varchar(30);
BEGIN
IF INSERTING THEN
IF :new.Nota is not null THEN
v_nota := (:new.Nota);
IF v_nota >= 21 THEN
v_obs :='NOTA INVALIDA';
dbms_output.put_line( v_obs|| 'No se puede ingresar porque la nota es invalida');
ELSIF v_nota < 21 THEN
v_obs:='NOTA VALIDA';
INSERT INTO TNOTA VALUES (:NEW.CodNota,v_nota,v_obs,:NEW.CodAsig);
END IF;
END IF;
END IF;
end ;

me sale el error ORA-04098: el disparador 'BDUNIVERSIDAD.VALIDA' no es válido y ha fallado al revalidar
ni ideaaaaaa.... desesperacion!!!
xfaaa
si podrias responderme seria genial ami correo aunq sea [email protected]
gracias
  #7 (permalink)  
Antiguo 04/01/2012, 01:48
 
Fecha de Ingreso: junio-2007
Mensajes: 891
Antigüedad: 16 años, 10 meses
Puntos: 43
Respuesta: Trigger En Oracle

Este es un foro serio, no vengas a vacilar.
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 08:31.