SQL - SQL Consulta de Cursores

 
Vista:
sin imagen de perfil
Val: 2
Ha disminuido su posición en 4 puestos en SQL (en relación al último mes)
Gráfica de SQL

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
requerimiento1
requerimiento2
requerimiento3

Resultados esperados:


resultado1
resultado2

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
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder