Creando_Package
Enviado por Camilo Muñoz Pereira • 27 de Octubre de 2016 • Trabajo • 409 Palabras (2 Páginas) • 90 Visitas
-- creacion del package nombre del pkg
CREATE OR REPLACE PACKAGE pkg_comision_vendedor AS
-- estamos llamando una funcion
FUNCTION fn_comision_mensual(
-- atributos o variables que vamos a utilizar
p_idvendedor NUMBER
, p_fecha VARCHAR2)
-- returnar una variable number
RETURN NUMBER;
-- vamos a cerrar el package
END pkg_comision_vendedor;
-- recuerde que el package es una caja en donde dentro de el podemos
-- llamar a triggers , procedimientos y funciones si uno estima conveniente
-- ahora debemos crear el cuerpo del pkg , en donde le vamos a decir que quiero es lo que haga
-- la diferencia con el codigo anterior se debe agragar en el encabezado la palabra body
CREATE OR REPLACE PACKAGE BODY pkg_comision_vendedor AS
FUNCTION fn_comision_mensual(
p_idvendedor NUMBER
, p_fecha VARCHAR2
) RETURN NUMBER
IS
v_total_com NUMBER(10); -- variable nueva
BEGIN
-- estamos ejecutando
SELECT SUM(valor_comision_boleta)
INTO v_total_com
FROM comision_ventas c
-- utilizando join comision_ventas y boleta
JOIN boleta b ON (b.nro_boleta = c.nro_boleta)
WHERE b.id_vendedor = p_idvendedor
AND TO_CHAR(fecha_boleta,'MM/YYYY') = p_fecha;
IF v_total_com IS NULL THEN
RETURN 0;
ELSE
RETURN v_total_com;
END IF;
END fn_comision_mensual; -- cerrar la funcion que estamos trabajando dentro del pkg
END pkg_comision_vendedor;-- cerrar el pkg siempre con el nombre que ustedes le asignaron
-------------------------------------------------------------------------------------------
triggers
-------------------------------------------------------------------------------------------
create or replace
TRIGGER trg_actualiza_stock
AFTER INSERT OR UPDATE OR DELETE ON detalle_boleta
FOR EACH ROW
WHEN (NEW.cantidad <> OLD.cantidad OR OLD.cantidad IS NULL OR NEW.cantidad IS NULL)
BEGIN
IF inserting THEN
UPDATE stock
SET stock_actual = stock_actual - :new.cantidad
WHERE cod_producto = :NEW.cod_producto;
ELSE
IF updating THEN
UPDATE stock
SET stock_actual = (stock_actual + :OLD.cantidad) - :new.cantidad
WHERE cod_producto = :NEW.cod_producto;
ELSE
UPDATE stock
SET stock_actual = stock_actual + :OLD.cantidad
WHERE cod_producto = :OLD.cod_producto;
END IF;
END IF;
DBMS_OUTPUT.PUT_LINE('ME EJECUTE');
END;
------------------------------------------------------------------------------------------
...