Ayuda con un bloque SQL
Publicado por Oscar (4 intervenciones) el 17/09/2010 21:48:56
Hola a todos.
Estoy intentando solucionar un ejercicio de PL/SQL y quisiera saber si alguien con conocimientos en el tema me puede colaborar. El asunto es el siguiente:
Tengo una BD en Oracle 10g con las tablas y sus respectivas columnas: AGENCIA (codigo_pk V20, nombre V30, dirNumero V40, dirBarrio V30, codCiudad_fk), RESERVA (codigo_pk V7, codAgencia_fk, cedCliente, placaCoche, fechaInicio, fechaFinal), CLIENTE (cedula_pk V15, nombre V30, apellido V30, dir_numero V30, dir_barrio V30) y COCHE (placa_pk V6, color V30, modelo N4, valorPrestamo N10, valorComercial N12, marca V30, codGaraje_uk).
Entonces, necesito mostrar la información del coche que más se reservó en un año determinado. Eso en un bloque PL/SQL y en otro bloque, poder incluir una nueva reserva, si me dan el nombre de la agencia, el nombre completo del cliente y la placa del coche.
Esto es lo que he intentadop hacer, pero nada:
para el primero:
VARIABLE mensaje VARCHAR2(300);
DECLARE
v_año VARCHAR2(4):=('&Año_Reserva:');
v_placa coche.placa%type;
v_num_veces NUMBER(4);
BEGIN
SELECT MAX(COUNT(*)) INTO v_num_veces, placacoche INTO v_placa
FROM reserva
GROUP BY placacoche
HAVING COUNT(placacoche) LIKE v_num_veces;
:mensaje:=v_num_veces;
END;
PRINT mensaje;
para lo segundo:
DECLARE
V_Agencia AGENCIA.nombre%TYPE:=UPPER('&NOMBRE_AGENCIA:');
V_Nombre_Cliente CLIENTE.nombre%TYPE:=UPPER('&NOMBRE_CLIENTE:');
V_Apellido_Cliente CLIENTE.apellido%TYPE:=UPPER('&APELLIDO_CLIENTE:');
V_Placa COCHE.placa%TYPE:=UPPER('&PLACA_COCHE:');
V_Fecha_Fin RESERVA.fechafinal%TYPE:=('&FECHA_FINAL:');
V_Cod_Reserva RESERVA.codigo%TYPE;
V_Cod_Agencia AGENCIA.codigo%TYPE;
V_Ced_Cliente CLIENTE.cedula%TYPE;
BEGIN
SELECT MAX(TO_NUMBER(codigo))+1 INTO V_Cod_Reserva FROM reserva;
SELECT codigo INTO V_Cod_Agencia FROM agencia WHERE UPPER(nombre) LIKE %V_Agencia%;
SELECT cedula INTO V_Ced_Cliente FROM cliente WHERE UPPER(nombre) LIKE %V_Nombre_Cliente% AND UPPER(apellido) LIKE %V_Apellido_Cliente%;
SELECT placa INTO v_Placa FROM coche WHERE UPPER(placa) LIKE V_Placa;
INSERT INTO reserva VALUES
(V_Cod_Reserva,V_Cod_Agencia,V_Ced_Cliente,V_Placa,SYSDATE,TO_DATE(V_Fecha_Fin));
COMMIT;
END;
Les agradezco cualquier ayuda. (Súper urgente!)
Estoy intentando solucionar un ejercicio de PL/SQL y quisiera saber si alguien con conocimientos en el tema me puede colaborar. El asunto es el siguiente:
Tengo una BD en Oracle 10g con las tablas y sus respectivas columnas: AGENCIA (codigo_pk V20, nombre V30, dirNumero V40, dirBarrio V30, codCiudad_fk), RESERVA (codigo_pk V7, codAgencia_fk, cedCliente, placaCoche, fechaInicio, fechaFinal), CLIENTE (cedula_pk V15, nombre V30, apellido V30, dir_numero V30, dir_barrio V30) y COCHE (placa_pk V6, color V30, modelo N4, valorPrestamo N10, valorComercial N12, marca V30, codGaraje_uk).
Entonces, necesito mostrar la información del coche que más se reservó en un año determinado. Eso en un bloque PL/SQL y en otro bloque, poder incluir una nueva reserva, si me dan el nombre de la agencia, el nombre completo del cliente y la placa del coche.
Esto es lo que he intentadop hacer, pero nada:
para el primero:
VARIABLE mensaje VARCHAR2(300);
DECLARE
v_año VARCHAR2(4):=('&Año_Reserva:');
v_placa coche.placa%type;
v_num_veces NUMBER(4);
BEGIN
SELECT MAX(COUNT(*)) INTO v_num_veces, placacoche INTO v_placa
FROM reserva
GROUP BY placacoche
HAVING COUNT(placacoche) LIKE v_num_veces;
:mensaje:=v_num_veces;
END;
PRINT mensaje;
para lo segundo:
DECLARE
V_Agencia AGENCIA.nombre%TYPE:=UPPER('&NOMBRE_AGENCIA:');
V_Nombre_Cliente CLIENTE.nombre%TYPE:=UPPER('&NOMBRE_CLIENTE:');
V_Apellido_Cliente CLIENTE.apellido%TYPE:=UPPER('&APELLIDO_CLIENTE:');
V_Placa COCHE.placa%TYPE:=UPPER('&PLACA_COCHE:');
V_Fecha_Fin RESERVA.fechafinal%TYPE:=('&FECHA_FINAL:');
V_Cod_Reserva RESERVA.codigo%TYPE;
V_Cod_Agencia AGENCIA.codigo%TYPE;
V_Ced_Cliente CLIENTE.cedula%TYPE;
BEGIN
SELECT MAX(TO_NUMBER(codigo))+1 INTO V_Cod_Reserva FROM reserva;
SELECT codigo INTO V_Cod_Agencia FROM agencia WHERE UPPER(nombre) LIKE %V_Agencia%;
SELECT cedula INTO V_Ced_Cliente FROM cliente WHERE UPPER(nombre) LIKE %V_Nombre_Cliente% AND UPPER(apellido) LIKE %V_Apellido_Cliente%;
SELECT placa INTO v_Placa FROM coche WHERE UPPER(placa) LIKE V_Placa;
INSERT INTO reserva VALUES
(V_Cod_Reserva,V_Cod_Agencia,V_Ced_Cliente,V_Placa,SYSDATE,TO_DATE(V_Fecha_Fin));
COMMIT;
END;
Les agradezco cualquier ayuda. (Súper urgente!)
Valora esta pregunta
0