ayuda con ejercicios pl/sql

tema enviado por reysolcj en SQL
tema iniciado el 26/03/2009
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; /