SQL Consulta de Cursores
Publicado por Cristobal (1 intervención) el 20/05/2021 22:29:48
Contexo: Bueno hola muy buenas todos estoy desarollando una prueba de SQL programacion de base de datos y la verdad es que estoy un poco perdido con el tema de actualizacion de datos atraves de un cursor, nose muy bien como funciona la transferencia de datos a otra tabla y sus respectivas columnas, no se si se tiene que usar una variable... o no.... para luego manejar esos datos y hacerle un par de calculos.. sumar etc... multiplicar... y la funcion del rowtype
basicamente piden que extraiga un par de datos de una tabla llamada factura de compra, esos los pongo en el cursor y luego los tengo q insertar en una tabla llamada detalle iva retencion y ahi para posteriormente calcular la comision mensual de los empleados...
les dejo los requerimientos q piden, los resultados esperados y mi avanze sql porfavor si pueden ayudarme antes de la media noche
Requerimientos



Resultados esperados:


avanze sql:
basicamente piden que extraiga un par de datos de una tabla llamada factura de compra, esos los pongo en el cursor y luego los tengo q insertar en una tabla llamada detalle iva retencion y ahi para posteriormente calcular la comision mensual de los empleados...
les dejo los requerimientos q piden, los resultados esperados y mi avanze sql porfavor si pueden ayudarme antes de la media noche
Requerimientos



Resultados esperados:


avanze sql:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
declare
cursor cur_factura is
select numero_fc, rut_pro,fecha_fc,mr_recep_fc, total_bono_fc, precio_mr_fc, neto_fc --v_iva_retenido
from FACTURA_COMPRA
order by fecha_fc ASC;
cursor cur2 (b_messano varchar2) is select detalle_iva ...
where to_char(fecha_fc,'mmyyyy') = b_mesanno);
v_detalle_iva cur_factura%rowtype;
v_iva=proveedor.retencion%rowtype;
v_iva_retenido number;
v_mensaje_error varchar2(250);
BEGIN
v_iva_retenido = round(factura_compra.neto_fc *v_iva/100,0);
OPEN cur_factura
FETCH cur_factura INTO v_detalle_iva
while cur_factura%FOUND LOOP
--APLICANDO LA RETENCION DEL IVA--
SELECT RETENCION
FROM PROVEEDOR
IF RETENCION:=19 THEN
INSERT INTO DETALLE_IVA_RETENIDO (IVA_RETENIDO_10, IVA_RETENIDO_19)
VALUES ('0', V_IVA_RETENIDO);
IF RETENCION:=0 THEN
INSERT INTO DETALLE_IVA_RETENIDO (IVA_RETENIDO_10, IVA_RETENIDO_19)
VALUES (NULL, NULL)
ELSE
V_IVARETENIDO:= (FACTURA_COMPRA.NETO_FC*10/100,0);
INSERT INTO DETALLE_IVA_RETENIDO (IVA_RETENIDO_10, IVA_RETENIDO_19)
VALUES (V_IVA_RETENIDO, '0');
END IF;
v_detalle_iva := v_detalle_iva + DETALLE_IVA_RETENIDO.fecha_fc;
INSERT INTO DETALLE_IVA_RETENIDO (numero_fc, rut_pro, fecha_fc, mc_facturado, total_bono_fc, precio_final_fc, neto_fc)
VALUES (cur_factura.fecha_fc, cur_factura.rut_pro, cur_factura.mr_facturado, cur_factura.total_bono_fc, cur_factura.precio_final_fc, cur.factura.neto_fc;
FETCH cur_factura INTO DETALLE_IVA_RETENIDO
exit when cur_factura%NOTFOUND;
end loop;
close cur_factura;
BEGIN
for v_meses in 1..12 loop
:b_mesanno:=lpad(v_meses,2,'0') || '2020';
open cursor (:b_mesaano);
dbms_output.put_line(:b_mesanno);
end loop;
end;
--ERROR DE MENSAJE VALOR 0--
exception
when no_data_found then
v_mensaje_error:=sqlerrm;
insert into error_proceso values (seq_error.nextval,
'Error, porcentaje con valor 0 ', v_mensaje_error);
INSERT INTO DETALLE_IVA_RETENIDO (IVA_RETENIDO_10, IVA_RETENIDO_19)
VALUES ('0', V_IVA_RETENIDO);
fetch cur_factura into v_reg;
end loop;
close cur_factura
Valora esta pregunta


0