› Foros › PC › Software libre
------ Procedimiento para generar recibos de cada alumno matriculados end cada servicio
CREATE OR REPLACE PROCEDURE Pr_Genera_Recibos
IS
v_Alumno_id Recibos_vigentes.ALUMNO_ID%TYPE;
v_Alumno_nom Recibos_vigentes.ALUMNO_NOM%TYPE;
v_Alumno_ape Recibos_vigentes.ALUMNO_APE%TYPE;
v_Tutor_id Recibos_vigentes.TUTOR_ID%TYPE;
v_Tutor_nom Recibos_vigentes.TUTOR_NOM%TYPE;
v_Tutor_ape Recibos_vigentes.TUTOR_APE%TYPE;
v_Serv_id Recibos_vigentes.SERV_ID%TYPE;
v_Serv_nom Recibos_vigentes.SERV_NOM%TYPE;
v_Serv_Coste Recibos_vigentes.SERV_COSTE%TYPE;
v_Nro_banco Recibos_vigentes.NRO_BANCO%TYPE;
v_Nro_cuenta Recibos_vigentes.NRO_CUENTA%TYPE;
-- Cursor que selecciona los datos del recibo de todos los campos necesarios para la tabla de recibo. Con los INNER JOIN nos aseguramos de que solo recoja una ocurrencia para cada registro de la tabla Alumno_Servicio_Cuenta
CURSOR c_Matriculas IS
SELECT a.Alumno_id, a.nombre, a.Apellidos, t.Tutor_id, t.Nombre, t.apellidos, s.Servicio_id, s.Nombre, s.Precio_mes, a_s_c.Nro_banco, a_s_c.Nro_cuenta
FROM Alumno_Servicio_Cuenta a_s_c INNER JOIN Alumno a ON a_s_c.Alumno_id = a.Alumno_id INNER JOIN Tutor t ON a.Tutor_id = t.Tutor_id INNER JOIN Servicio s ON a_s_c.Servicio_id = s.Servicio_id;
BEGIN
DBMS_OUTPUT.PUT_LINE("Generando recibos...");
DBMS_OUTPUT.PUT_LINE("");
OPEN c_Matriculas;
FETCH c_Matriculas INTO v_Alumno_id, v_Alumno_nom, v_Alumno_ape, v_Tutor_id, v_Tutor_nom, v_Tutor_ape, v_Serv_id, v_Serv_nom, v_Serv_Coste, v_Nro_banco, v_Nro_cuenta;
LOOP
INSERT INTO Recibos_vigentes(Recibo_id, Alumno_id, Alumno_nom, Alumno_ape, Tutor_id, Tutor_nom, Tutor_ape, Serv_id, Serv_nom, Serv_Coste, Nro_banco, Nro_cuenta)
VALUES(Id_Recibo.NEXTVAL, v_Alumno_id, v_Alumno_nom, v_Alumno_ape, v_Tutor_id, v_Tutor_nom, v_Tutor_ape, v_Serv_id, v_Serv_nom, v_Serv_Coste, v_Nro_banco, v_Nro_cuenta);
FETCH c_Matriculas INTO v_Alumno_id, v_Alumno_nom, v_Alumno_ape, v_Tutor_id, v_Tutor_nom, v_Tutor_ape, v_Serv_id, v_Serv_nom, v_Serv_Coste, v_Nro_banco, v_Nro_cuenta;
EXIT WHEN c_Matriculas%NOTFOUND;
END LOOP;
CLOSE c_Matriculas;
DBMS_OUTPUT.PUT_LINE("Recibos generados");
END;
/
00:22:27.437 DBMS GLOBAL -- Error: ORA-00604: error producido a nivel 1 de SQL recursivo
00:22:27.484 DBMS GLOBAL -- ORA-01400: no se puede realizar una inserción NULL en ("SYS"."OBJ$"."NAME"), Batch 1 Line 1 Col 1
DECLARE
cursor c_tko
IS
select CONTR_NR
, CONTRACT_NR
, CONTR_BSCS_ID
, CONTR_CGA_ID
, HIST_FROM_DT
, HIST_FROM_DT_NR
, HIST_STATUS
, HIST_TO_DT
, previous_hist_to_dt
, next_hist_from_dt
, next_hist_from_dt_nr
, ranking_desc
, contr_action_descr
from STT.C_TKO_TEMP
order by CONTR_NR, CONTR_BSCS_ID , HIST_FROM_DT , HIST_TO_DT;
BEGIN
FOR c_tko_rec IN c_tko LOOP
......................
END LOOP
------ Procedimiento para generar recibos de cada alumno matriculados end cada servicio
CREATE OR REPLACE PROCEDURE Pr_Genera_Recibos
IS
v_Alumno_id Recibos_vigentes.ALUMNO_ID%TYPE;
v_Alumno_nom Recibos_vigentes.ALUMNO_NOM%TYPE;
v_Alumno_ape Recibos_vigentes.ALUMNO_APE%TYPE;
v_Tutor_id Recibos_vigentes.TUTOR_ID%TYPE;
v_Tutor_nom Recibos_vigentes.TUTOR_NOM%TYPE;
v_Tutor_ape Recibos_vigentes.TUTOR_APE%TYPE;
v_Serv_id Recibos_vigentes.SERV_ID%TYPE;
v_Serv_nom Recibos_vigentes.SERV_NOM%TYPE;
v_Serv_Coste Recibos_vigentes.SERV_COSTE%TYPE;
v_Nro_banco Recibos_vigentes.NRO_BANCO%TYPE;
v_Nro_cuenta Recibos_vigentes.NRO_CUENTA%TYPE;
-- Cursor que selecciona los datos del recibo de todos los campos necesarios para la tabla de recibo. Con los INNER JOIN nos aseguramos de que solo recoja una ocurrencia para cada registro de la tabla Alumno_Servicio_Cuenta
CURSOR c_Matriculas IS
SELECT a.Alumno_id, a.nombre, a.Apellidos, t.Tutor_id, t.Nombre, t.apellidos, s.Servicio_id, s.Nombre, s.Precio_mes, a_s_c.Nro_banco, a_s_c.Nro_cuenta
FROM Alumno_Servicio_Cuenta a_s_c INNER JOIN Alumno a ON a_s_c.Alumno_id = a.Alumno_id INNER JOIN Tutor t ON a.Tutor_id = t.Tutor_id INNER JOIN Servicio s ON a_s_c.Servicio_id = s.Servicio_id;
BEGIN
DBMS_OUTPUT.PUT_LINE("Generando recibos...");
DBMS_OUTPUT.PUT_LINE("");
--OPEN c_Matriculas;
--FETCH c_Matriculas INTO v_Alumno_id, v_Alumno_nom, v_Alumno_ape, v_Tutor_id, v_Tutor_nom, v_Tutor_ape, v_Serv_id, v_Serv_nom, v_Serv_Coste, v_Nro_banco, v_Nro_cuenta;
FOR i IN c_Matriculas LOOP
INSERT INTO Recibos_vigentes(Recibo_id,
Alumno_id,
Alumno_nom,
Alumno_ape,
Tutor_id,
Tutor_nom,
Tutor_ape,
Serv_id,
Serv_nom,
Serv_Coste,
Nro_banco,
Nro_cuenta)
VALUES(Id_Recibo.NEXTVAL,
i.Alumno_id,
i.Alumno_nom,
i.Alumno_ape,
i.Tutor_id,
i.Tutor_nom,
i.Tutor_ape,
i.Serv_id,
i.Serv_nom,
i.Serv_Coste,
i.Nro_banco,
i.Nro_cuenta);
END LOOP;
--FETCH c_Matriculas INTO v_Alumno_id, v_Alumno_nom, v_Alumno_ape, v_Tutor_id, v_Tutor_nom, v_Tutor_ape, v_Serv_id, v_Serv_nom, v_Serv_Coste, v_Nro_banco, v_Nro_cuenta;
--EXIT WHEN c_Matriculas%NOTFOUND;
--END LOOP;
--CLOSE c_Matriculas;
DBMS_OUTPUT.PUT_LINE("Recibos generados");
END;
/