01 PLSQL Procedimientos Almacenados Oracle

You might also like

Download as docx, pdf, or txt
Download as docx, pdf, or txt
You are on page 1of 3

CREATE TABLE liquidacion_sueldo (

rutempleado VARCHAR2(10) NOT NULL,


mes NUMBER(4) NOT NULL,
anno NUMBER(4) NOT NULL,
sueldo_base NUMBER(10) NOT NULL,
monto_afp NUMBER(8) NOT NULL,
monto_isapre NUMBER(8) NOT NULL,
total_liquido NUMBER(8) NOT NULL,
CONSTRAINT liquidacion_pk PRIMARY KEY (rutempleado, mes, anno)
);

SELECT * FROM afp;


DESC empleado;

CREATE OR REPLACE FUNCTION fn_dcto_afp


(v_rut VARCHAR)
RETURN NUMBER
IS
v_sueldo NUMBER;
v_porc_afp NUMBER;
dcto_afp NUMBER;
BEGIN
SELECT
EMP.sueldo_base,
A.porc
INTO
v_sueldo,v_porc_afp
FROM empleado EMP INNER JOIN afp A
ON EMP.idafp=A.idafp
WHERE EMP.rutemp=v_rut;

dcto_afp := ROUND(v_sueldo * (v_porc_afp /100),0);

RETURN dcto_afp;
END fn_dcto_afp;
/

SELECT * FROM AFP;


DECLARE

BEGIN

DBMS_OUTPUT.PUT_LINE(FN_DCTO_AFP('60579696'));
END;
/

SET SERVEROUTPUT ON;

CREATE OR REPLACE PROCEDURE sp_calcula_afp


(v_rut VARCHAR)
IS
monto_afp NUMBER;
BEGIN
monto_afp := FN_DCTO_AFP(v_rut);

DBMS_OUTPUT.PUT_LINE(monto_afp);

END sp_calcula_afp;
/

EXECUTE sp_calcula_afp('60579696');

--EJECUTAR PROCEDIMIENTO DESDE BLOQUE ANONIMO

DECLARE

BEGIN
sp_calcula_afp('60579696');
END;
/

CREATE OR REPLACE PROCEDURE sp_calcula_isapre


(v_rut IN VARCHAR, r_dcto_isapre OUT NUMBER)
IS
v_sueldo NUMBER;
BEGIN
SELECT
sueldo_base
INTO
v_sueldo
FROM empleado
WHERE rutemp=v_rut;

r_dcto_isapre := ROUND(v_sueldo*0.07,0);

END sp_calcula_isapre;
/

EXECUTE sp_calcula_isapre('60579696',monto_isapre);

SELECT * FROM ISAPRE;

DECLARE
monto_isapre NUMBER;
BEGIN
sp_calcula_isapre('60579696',monto_isapre);
DBMS_OUTPUT.PUT_LINE(monto_isapre);
END;
/

You might also like