Está en la página 1de 4

CREATE OR REPLACE PACKAGE BODY pack_datos_ventas IS

FUNCTION numinstr (
p_source IN VARCHAR2,
p_token IN VARCHAR2
) RETURN PLS_INTEGER IS
v_occurrence PLS_INTEGER := 1;
v_start PLS_INTEGER := 1;
v_loc PLS_INTEGER;
BEGIN
v_loc := instr(p_source, p_token, 1, 1);
WHILE v_loc > 0 LOOP
v_occurrence := v_occurrence + 1;
v_start := v_loc + 1;
v_loc := instr(p_source, p_token, v_start, 1);
END LOOP;

RETURN v_occurrence - 1;
END numinstr;

FUNCTION get_split_field (
p_source IN VARCHAR2,
p_delim IN VARCHAR2,
nth PLS_INTEGER
) RETURN VARCHAR2 IS

v_num_delims PLS_INTEGER;
first_pos PLS_INTEGER;
final_pos PLS_INTEGER;
len_delim PLS_INTEGER := length(p_delim);
ret_len PLS_INTEGER;
BEGIN
v_num_delims := numinstr(p_source, p_delim);
IF nth < 1 OR nth > v_num_delims + 1 THEN
RETURN NULL;
ELSE
IF nth = 1 THEN
first_pos := 1;
ELSE
first_pos := instr(p_source, p_delim, 1, nth - 1) + len_delim;
END IF;

IF nth > v_num_delims THEN


final_pos := length(p_source);
ELSE
final_pos := instr(p_source, p_delim, 1, nth) - 1;
END IF;

ret_len := ( final_pos - first_pos ) + 1;


RETURN substr(p_source, first_pos, ret_len);
END IF;

END get_split_field;

PROCEDURE p_ins_cliente (
p_rut_cliente IN datos_cliente.rut_cliente%TYPE,
p_nombre_cliente IN datos_cliente.nombre_cliente%TYPE,
p_apellido_cliente IN datos_cliente.apellido_cliente%TYPE,
p_direccion_cliente IN datos_cliente.direccion_cliente%TYPE,
p_numero_telefono_cliente IN datos_cliente.numero_telefono_cliente%TYPE,
p_usuario IN datos_cliente.usuario_creador%TYPE,
p_out_msg OUT VARCHAR2
) IS
ln_id_cliente NUMBER := 0;
BEGIN
p_out_msg := 'OK';
SELECT
nvl(MAX(j.id_cliente), 0) + 1
INTO ln_id_cliente
FROM
datos_cliente j;

INSERT INTO datos_cliente VALUES (


ln_id_cliente,
p_rut_cliente,
p_nombre_cliente,
p_apellido_cliente,
p_direccion_cliente,
p_numero_telefono_cliente,
sysdate,
p_usuario
);

COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
p_out_msg := 'Error Tecnico: '
|| dbms_utility.format_error_stack
|| ' - '
|| dbms_utility.format_error_backtrace;
END p_ins_cliente;

PROCEDURE p_ins_productos (
p_cod_producto IN datos_productos.cod_producto%TYPE,
p_nom_producto IN datos_productos.nom_producto%TYPE,
p_precio_producto IN datos_productos.precio_producto%TYPE,
p_moneda_producto IN datos_productos.moneda_producto%TYPE,
p_usuario IN datos_productos.usuario_creador%TYPE,
p_out_msg OUT VARCHAR2
) IS
BEGIN
p_out_msg := 'OK';
INSERT INTO datos_productos VALUES (
p_cod_producto,
p_nom_producto,
p_precio_producto,
p_moneda_producto,
sysdate,
p_usuario
);

COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
p_out_msg := 'Error Tecnico: '
|| dbms_utility.format_error_stack
|| ' - '
|| dbms_utility.format_error_backtrace;
END p_ins_productos;

PROCEDURE p_ins_venta (
p_id_cliente IN datos_venta_cab.id_cliente%TYPE,
p_estado_venta IN datos_venta_cab.estado_venta%TYPE,
p_monto_total IN datos_venta_cab.monto_total%TYPE,
p_porc_decuento IN datos_venta_cab.porc_decuento%TYPE,
p_r_detalle_productos IN t_datos_productos,
p_usuario IN datos_productos.usuario_creador%TYPE,
p_out_msg OUT VARCHAR2
) IS
ln_id_venta NUMBER := 0;
ln_id_venta_det NUMBER := 0;
BEGIN
p_out_msg := 'OK';
SELECT
nvl(MAX(j.id_venta), 0) + 1
INTO ln_id_venta
FROM
datos_venta_cab j;

INSERT INTO datos_venta_cab VALUES (


ln_id_venta,
p_id_cliente,
p_estado_venta,
p_monto_total,
p_porc_decuento,
sysdate,
p_usuario
);

FOR lr_datos IN p_r_detalle_productos.first..p_r_detalle_productos.last


LOOP
ln_id_venta_det := 0;
SELECT
nvl(MAX(j.id_venta), 0) + 1
INTO ln_id_venta_det
FROM
datos_venta_det j;

INSERT INTO datos_venta_det VALUES (


ln_id_venta_det,
ln_id_venta,
get_split_field(p_r_detalle_productos(lr_datos), ';', 1),
get_split_field(p_r_detalle_productos(lr_datos), ';', 2),
sysdate,
p_usuario
);

END LOOP;

COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
p_out_msg := 'Error Tecnico: '
|| dbms_utility.format_error_stack
|| ' - '
|| dbms_utility.format_error_backtrace;
END p_ins_venta;

PROCEDURE p_upd_cliente (
p_id_cliente IN datos_cliente.id_cliente%TYPE,
p_rut_cliente IN datos_cliente.rut_cliente%TYPE,
p_nombre_cliente IN datos_cliente.nombre_cliente%TYPE,
p_apellido_cliente IN datos_cliente.apellido_cliente%TYPE,
p_direccion_cliente IN datos_cliente.direccion_cliente%TYPE,
p_numero_telefono_cliente IN datos_cliente.numero_telefono_cliente%TYPE,
p_usuario IN datos_cliente.usuario_creador%TYPE,
p_out_msg OUT VARCHAR2
) IS
BEGIN
UPDATE datos_cliente a
SET
a.rut_cliente = p_rut_cliente,
a.nombre_cliente = p_nombre_cliente,
a.apellido_cliente = p_apellido_cliente,
a.direccion_cliente = p_direccion_cliente,
a.numero_telefono_cliente = p_numero_telefono_cliente
WHERE
a.id_cliente = p_id_cliente;

COMMIT;
EXCEPTION
WHEN OTHERS THEN
ROLLBACK;
p_out_msg := 'Error Tecnico: '
|| dbms_utility.format_error_stack
|| ' - '
|| dbms_utility.format_error_backtrace;
END p_upd_cliente;

procedure p_upd_productos( p_cod_producto IN datos_productos.cod_producto


%TYPE,
p_nom_producto IN datos_productos.nom_producto%TYPE,
p_precio_producto IN datos_productos.precio_producto%TYPE,
p_moneda_producto IN datos_productos.moneda_producto%TYPE,
p_usuario IN datos_productos.usuario_creador%TYPE,
p_out_msg OUT VARCHAR2)is

begin

end p_upd_productos;

END pack_datos_ventas;

También podría gustarte