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

ayuda con unos ejercicios de pl/sql

Estas en el tema de ayuda con unos ejercicios de pl/sql en el foro de Oracle en Foros del Web. hola me gustaria que me echases una mano con estos ejercicios, soy pesimo con el pl/sql y necesito realizarlos... por adelantado.. GRACIAS!! un saludo Sean ...
  #1 (permalink)  
Antiguo 26/03/2009, 05:45
 
Fecha de Ingreso: marzo-2009
Mensajes: 1
Antigüedad: 15 años, 1 mes
Puntos: 0
ayuda con unos ejercicios de pl/sql

hola me gustaria que me echases una mano con estos ejercicios, soy pesimo con el pl/sql y necesito realizarlos...
por adelantado.. GRACIAS!!
un saludo

Sean las siguientes tablas:
DROP TABLE pregunta;
CREATE TABLE pregunta(
nro_pregunta INTEGER PRIMARY KEY
);
DROP TABLE nota;
CREATE TABLE nota
(nro_prueba INTEGER,
nro_pregunta INTEGER,
calif CHAR(1) NOT NULL CHECK(calif IN ('a', 'p')), -- a: aprobado, p: perdido
PRIMARY KEY (nro_prueba, nro_pregunta));
Sea la consulta:

SELECT nro_prueba
FROM nota
MINUS
SELECT nro_prueba
FROM nota
WHERE
(calif='a' AND nro_pregunta NOT IN (SELECT nro_pregunta FROM pregunta)) OR
(calif='p' AND nro_pregunta IN (SELECT nro_pregunta FROM pregunta));
Su trabajo es entender qué realiza la consulta y desarrollar un procedimiento en PL/SQL que haga lo mismo.
Nota: El procedimiento PL/SQL que usted desarrolle no puede usar la consulta propuesta, debe resolverlo con un enfoque procedimental totalmente diferente al planteado en la consulta, es decir sólo puede hacer uso de cursores cuya consulta base sea:
SELECT * FROM nota; ó
SELECT * FROM pregunta;
-----------------------------------
En una compañía de reparto se tienen camiones. Cada camión puede hacer varios viajes durante el día. Para cada camión se registra su hora de partida y su hora de regreso para cada viaje que realiza.
Por control de recursos la compañía jamás programará un viaje que dure menos de 40 minutos (ida + regreso). Además se debe evitar el ingreso de registros inconsistentes, por ejemplo si el camión 459 el 3 de Nov. de 2006 inició un viaje a las 7:31 AM y regresó a las 8:35 AM no es posible que haya otro registro donde figure el camión 459 el 3 de Nov. de 2006 iniciando un viaje a las 8:15 AM (¡porque aún no ha regresado!).
Cree los triggers necesarios para garantizar lo anterior en la base de datos.
------------------------
Sea la siguiente tabla:
CREATE TABLE mesada (
id_receptor NUMBER(8) PRIMARY KEY,
id_benefactor NUMBER(8) REFERENCES mesada,
valor NUMBER(6)
);
Muestra de datos:
INSERT INTO mesada VALUES (10, null, 0);
INSERT INTO mesada VALUES (20, 10, 70);
INSERT INTO mesada VALUES (30, 10, 80);
INSERT INTO mesada VALUES (40, 20, 90);
INSERT INTO mesada VALUES (50, 20, 20);
INSERT INTO mesada VALUES (60, 40, 20);
INSERT INTO mesada VALUES (70, 50, 55);
INSERT INTO mesada VALUES (80, 30, 25);
Realice una función en PL/SQL tal que a partir del código de un benefactor dado devuelva el total de mesadas que se derivan a partir de él.
Por ejemplo si se entra el código de benefactor 20 la función debe devolver 185. (90+20+20+55).
Si se entra el 50 deberá devolver 55 solamente.
Si se entra el 80 deberá devolver 0.
---------------------------
Encuentre una consulta SQL en Oracle que imprima lo mismo que el siguiente código PL/SQL.

Sea la tabla:
DROP TABLE test;
CREATE TABLE test(
codigo NUMBER(8) PRIMARY KEY,
valor NUMBER(8) UNIQUE NOT NULL
);
INSERT INTO test VALUES(1, 20);
INSERT INTO test VALUES(8, 34);
INSERT INTO test VALUES(9, 30);
INSERT INTO test VALUES(7, 31);
INSERT INTO test VALUES(6, 2);
INSERT INTO test VALUES(87, 122);
INSERT INTO test VALUES(11, 200);
INSERT INTO test VALUES(2, 1);
INSERT INTO test VALUES(100, 9);
Etc.
Nota: Esta es sólo una muestra de datos, por supuesto hay muchos más registros...
DECLARE
a NUMBER:= 1;
BEGIN
FOR orden IN (SELECT * FROM test ORDER BY valor)
LOOP
IF a MOD 2 = 1 THEN
DBMS_OUTPUT.PUT_LINE(orden.codigo || ' ' || orden.valor );
END IF;
a:=a+1;
END LOOP;
END;
/
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 05:34.