Diferencia entre revisiones de «Práctica 1 - revisa pedidos.sql»

De FdIwiki ABD
Saltar a: navegación, buscar
(Página creada con «--~~~~ (Jesús Copado y Javier Vicente) CREATE OR REPLACE PROCEDURE REVISA_PEDIDOS IS CURSOR cursor_pedidos IS SELECT codigo, importe_total FROM pedidos FOR UPDATE...»)
 
 
(3 revisiones intermedias por el mismo usuario no mostrado)
Línea 1: Línea 1:
 
--[[Usuario:Jcopado|Jcopado]] ([[Usuario discusión:Jcopado|discusión]]) 20:48 14 mar 2016 (CET) (Jesús Copado y Javier Vicente)
 
--[[Usuario:Jcopado|Jcopado]] ([[Usuario discusión:Jcopado|discusión]]) 20:48 14 mar 2016 (CET) (Jesús Copado y Javier Vicente)
  
CREATE OR REPLACE PROCEDURE REVISA_PEDIDOS IS
+
  CREATE OR REPLACE PROCEDURE REVISA_PEDIDOS IS
  
CURSOR cursor_pedidos IS
+
    CURSOR cursor_pedidos IS
SELECT codigo, importe_total
+
      SELECT codigo, importe_total
FROM pedidos
+
      FROM pedidos
FOR UPDATE OF pedidos.importe_total;
+
      FOR UPDATE OF pedidos.importe_total;
 
      
 
      
importe_debido NUMBER(8,2);
+
    importe_debido NUMBER(8,2);
num_filas_modificadas INT := 0;
+
    num_filas_modificadas INT := 0;
 
 
imp_pedido NUMBER(8,2);
+
    imp_pedido NUMBER(8,2);
cod_pedido NUMBER(8);
+
    cod_pedido NUMBER(8);
 
 
pre_contiene NUMBER(8,2);
+
    pre_contiene NUMBER(8,2);
uni_contiene NUMBER(4);
+
    uni_contiene NUMBER(4);
 
 
BEGIN
+
  BEGIN
  
OPEN cursor_pedidos;
+
    OPEN cursor_pedidos;
LOOP
+
    LOOP
FETCH cursor_pedidos INTO cod_pedido, imp_pedido;
+
      FETCH cursor_pedidos INTO cod_pedido, imp_pedido;
EXIT WHEN cursor_pedidos%NOTFOUND;
+
      EXIT WHEN cursor_pedidos%NOTFOUND;
importe_debido := calcularImporteDebido(cod_pedido);
+
      importe_debido := calcularImporteDebido(cod_pedido);
IF importe_debido <> imp_pedido THEN
+
        IF importe_debido <> imp_pedido THEN
num_filas_modificadas := num_filas_modificadas + 1;
+
        num_filas_modificadas := num_filas_modificadas + 1;
UPDATE pedidos
+
        UPDATE pedidos
SET importe_total = importe_debido
+
        SET importe_total = importe_debido
WHERE CURRENT OF cursor_pedidos;
+
        WHERE CURRENT OF cursor_pedidos;
DBMS_OUTPUT.put_line(' - El importe total del pedido de código ' || cod_pedido || ' ha sido actualizado a ' || importe_debido);
+
        DBMS_OUTPUT.put_line(' - El importe total del pedido de código ' || cod_pedido || ' ha sido actualizado a ' || importe_debido);
END IF;
+
        END IF;
END LOOP;
+
      END LOOP;
 +
    CLOSE cursor_pedidos;
 
 
CLOSE cursor_pedidos;
+
    IF num_filas_modificadas = 0 THEN
+
      DBMS_OUTPUT.put_line('Ningún cambio en los datos de la tabla Pedidos.');
IF num_filas_modificadas = 0 THEN
+
    ELSE
DBMS_OUTPUT.put_line('Ningún cambio en los datos de la tabla Pedidos.');
+
      DBMS_OUTPUT.put_line('Número de filas modificadas en la tabla Pedidos: ' || num_filas_modificadas);
ELSE
+
    END IF;
DBMS_OUTPUT.put_line('Número de filas modificadas en la tabla Pedidos: ' || num_filas_modificadas);
+
END IF;
+
  
END REVISA_PEDIDOS;
+
  END REVISA_PEDIDOS;

Última revisión de 21:54 14 mar 2016

--Jcopado (discusión) 20:48 14 mar 2016 (CET) (Jesús Copado y Javier Vicente)

 CREATE OR REPLACE PROCEDURE REVISA_PEDIDOS IS
   CURSOR cursor_pedidos IS
     SELECT codigo, importe_total
     FROM pedidos
     FOR UPDATE OF pedidos.importe_total;
   
   importe_debido NUMBER(8,2);
   num_filas_modificadas INT := 0;
   imp_pedido NUMBER(8,2);
   cod_pedido NUMBER(8);
   pre_contiene NUMBER(8,2);
   uni_contiene NUMBER(4);
 BEGIN
   OPEN cursor_pedidos;
   LOOP
     FETCH cursor_pedidos INTO cod_pedido, imp_pedido;
     EXIT WHEN cursor_pedidos%NOTFOUND;
     importe_debido := calcularImporteDebido(cod_pedido);
       IF importe_debido <> imp_pedido THEN
       num_filas_modificadas := num_filas_modificadas + 1;
       UPDATE pedidos
       SET importe_total = importe_debido
       WHERE CURRENT OF cursor_pedidos;
       DBMS_OUTPUT.put_line(' - El importe total del pedido de código ' || cod_pedido || ' ha sido actualizado a ' || importe_debido);
       END IF;
     END LOOP;
   CLOSE cursor_pedidos;
   IF num_filas_modificadas = 0 THEN
     DBMS_OUTPUT.put_line('Ningún cambio en los datos de la tabla Pedidos.');
   ELSE
     DBMS_OUTPUT.put_line('Número de filas modificadas en la tabla Pedidos: ' || num_filas_modificadas);
   END IF;
 END REVISA_PEDIDOS;