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

Ayuda con Procedimiento Almacenado

Estas en el tema de Ayuda con Procedimiento Almacenado en el foro de Bases de Datos General en Foros del Web. Hola, porfavor Ayudenme con este problemita :( Tengo la base de datos, con sus tablas y atributos, que previamente debo llenar (ingresar registos) pero mi ...
  #1 (permalink)  
Antiguo 15/11/2006, 22:09
 
Fecha de Ingreso: noviembre-2006
Mensajes: 2
Antigüedad: 17 años, 5 meses
Puntos: 0
Ayuda con Procedimiento Almacenado

Hola, porfavor Ayudenme con este problemita :(

Tengo la base de datos, con sus tablas y atributos, que previamente debo llenar (ingresar registos) pero mi problema son los PROCEDIMIENTOS ALMACENADOS y un TRIGGER (que no se como hacerlos), los cuales deben cumplir los siguentes requisitos:

Tengo que, mediante 2 Procedimientos Almacenados y 1 Trigger, Inscribir a un curso nuevo y asociarle todos los alumnos dados hasta cumplir con el total de vacantes que tiene el curso e indicar que se ha cumplido con esta restricción. (mi motor es ORACLE y conectarlo a PHP, pero eso PUEDO HACERLO Yo :) )

Entonces decidi que los procedimientos hagan estas funciones:

Procedimiento Almacenado (1):Cada vez que se agregue un alumno al curso, el contador de current_alumnos deberá incrementarse.

Procedimiento Almacenado (2): Cuando sea agregado un alumno al curso se actualizara la Lista dejando ordenados a los alumnos por Apellido (alfabéticamente).

Triggers: Mostrará en Pantalla que el límite de alumnos por curso fue alcanzado y que no puede ingresar más.


Si alguien entendido en Procedimientos Almacenados y Triggers Porfavor puede ayudarme, le agradeceria mucho. Dejo las Tablas que llevo para que se entienda la idea. Desde ya muchas gracias y acepto cualquier sugerencia.

Ojala se entienda, pongo todo por si alguien se confunde.... Solo necesito ayuda con los procedimientos y el trigger.... Ojala alguien sepa, gracias.


//Las tablas aca Abajao //

CREATE SEQUENCE student_sequence
START WITH 10000
INCREMENT BY 1;

CREATE TABLE students (
id NUMBER(5) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(20),
major VARCHAR2(30),
current_credits NUMBER(3)
);

INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Scott', 'Smith',
'Computer Science', 11);

INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Margaret', 'Mason',
'History', 4);

INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Joanne', 'Junebug',
'Computer Science', 8);

INSERT INTO students (id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Manish', 'Murgatroid',
'Economics', 8);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES(student_sequence.NEXTVAL, 'Patrick', 'Poll',
'History', 4);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Timothy', 'Taller',
'History', 4);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Barbara', 'Blues',
'Economics', 7);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'David', 'Dinsmore',
'Music', 4);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Ester', 'Elegant',
'Nutrition', 8);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Rose', 'Riznit',
'Music', 7);

INSERT INTO STUDENTS(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Rita', 'Razmataz',
'Nutrition', 8);

INSERT INTO students(id, first_name, last_name, major,
current_credits)
VALUES (student_sequence.NEXTVAL, 'Shay', 'Shariatpanahy',
'Computer Science', 3);


CREATE TABLE classes (
department CHAR(3),
course NUMBER(3),
description VARCHAR2(2000),
max_students NUMBER(3),
current_students NUMBER(3),
num_credits NUMBER(1),
room_id NUMBER(5),
CONSTRAINT classes_department_course
PRIMARY KEY (department, course)
);

INSERT INTO classes(department, course, description, max_students,
current_students, num_credits, room_id)
VALUES ('HIS', 101, 'History 101', 30, 11, 4, 20000);



CREATE TABLE registered_students (
student_id NUMBER(5) NOT NULL,
department CHAR(3) NOT NULL,
course NUMBER(3) NOT NULL,
grade CHAR(1),
CONSTRAINT rs_grade
CHECK (grade IN ('A', 'B', 'C', 'D', 'E')),
CONSTRAINT rs_student_id
FOREIGN KEY (student_id) REFERENCES students (id),
CONSTRAINT rs_department_course
FOREIGN KEY (department, course)
REFERENCES classes (department, course)
);

INSERT INTO registered_students (student_id, department, course,
grade)
VALUES (10000, 'CS', 102, 'A');

Última edición por msalas11; 15/11/2006 a las 22:14 Razón: no quedo bien a la primera
  #2 (permalink)  
Antiguo 20/11/2006, 02:42
 
Fecha de Ingreso: diciembre-2005
Ubicación: Madrid, España
Mensajes: 154
Antigüedad: 18 años, 4 meses
Puntos: 2
1) Los triggers no son más que funciones de la base de datos que se ejecutan cuando se realiza una operación en una tabla, ya sea de insertado, borrado o actualizado, según la definición del trigger.

2) Los procedures son funciones que realizan operaciones de cualquier tipo en la base de datos, y como cualquier función tienen unas entradas y unas salidas. Todo procedure puede ser sustituido por código php en este caso.


Asegúrate muy bien de lo que pretendes hacer.


- Procedimiento Almacenado (1):Cada vez que se agregue un alumno al curso, el contador de current_alumnos deberá incrementarse.

- Procedimiento Almacenado (2): Cuando sea agregado un alumno al curso se actualizara la Lista dejando ordenados a los alumnos por Apellido (alfabéticamente).

Más bien, esto son Triggers (operaciones que se realizan después de insertado).



Triggers: Mostrará en Pantalla que el límite de alumnos por curso fue alcanzado y que no puede ingresar más.

Esto sería un procedure o función oracle al que llama tu código PHP. Si quieres evitar complicaciones puedes hacer esta función directamenet en php.

Saludos y suerte
  #3 (permalink)  
Antiguo 20/11/2006, 20:24
 
Fecha de Ingreso: noviembre-2006
Mensajes: 2
Antigüedad: 17 años, 5 meses
Puntos: 0
Si, muchas gracias, Mira, lo que pasa es que es un trabajo , y entre la lista de cosas que debo hacen en la aplicacion (php, html, sql) tengo que hacer 2 procedimientos almacenados y 1 trigger. (tambien pense en hacerlo sin P.A y triggers, pero eso me exigieron)

Pero cambie algunas cosas y llevo esto:

ESTE ES EL TRIGGER que llevo, pero no me compila, no se que estara mal.

CREATE OR REPLACE TRIGGER INCREM_ALUMNO_CLASE
AFTER INSERT ON REGISTERED_STUDENTS
FOR EACH ROW
DECLARE
BEGIN
UPDATE CLASSES SET CURRENT_STUDENTS= CURRENT_STUDENTS+1
WHERE C.COURSE=RS.COURSE;

END;

(cada vez que se ingrese un alumno nuevo, el CURRENT_STUDENTS se incrementa en 1)
  #4 (permalink)  
Antiguo 21/11/2006, 17:40
Avatar de kikolice  
Fecha de Ingreso: marzo-2004
Mensajes: 1.510
Antigüedad: 20 años, 1 mes
Puntos: 7
"WHERE C.COURSE=RS.COURSE;"

deberia de quedar

WHERE COURSE = NEW.COURSE;
__________________
Blogzote.com :-) Mi blog
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:05.