Procedimientos almacenados
Hola amigos me podrian informar de como crear procedimientos almacenados en oracle 10g Express Edition
Pues es simple... al igual que en las antiguas verisones de Oracle.
Un Ej.
CREATE OR REPLACE PROCEDURE pro_ndbcr_valorespimpre (
vr_numero_db_cr IN VARCHAR2,
vs_numrecibo OUT VARCHAR2,
vs_numdescargo OUT NUMBER,
vs_montodescargo OUT NUMBER,
vs_codRpta OUT NUMBER,
vs_msgRpta OUT VARCHAR2
)
IS
--
-- Este procedimiento almecenado extrae numero de recibo, numero de descargo y monto de descargo
-- de la tabla NOTA-DB_CR para que posteriormente con estos datos se pueda proceder a imprimir
-- los concerniente con la NOTA_DB_CR. Para tal efecto necesita del campo Numero de Nota DB-CR
--
vt_tmp NUMBER;
BEGIN
vt_tmp := 0;
SELECT NVL(COUNT(*), 0) INTO vt_tmp FROM nota_db_cr WHERE numero=vr_numero_db_cr;
IF(vt_tmp=1) then
SELECT dl.numero_rc numRecibo, dl.numero_descargo numDescargo INTO vs_numrecibo, vs_numdescargo
FROM nota_db_cr n , det_liquida dl
WHERE n.numero=vr_numero_db_cr and n.numero=dl.numero_db_rc and dl.marca='A';
IF(NVL(vs_numdescargo, -777)<>-777) then
SELECT NVL(COUNT(*), 0) INTO vt_tmp FROM descargo WHERE numero=vs_numdescargo;
IF(vt_tmp=1) then
SELECT monto INTO vs_montodescargo
FROM descargo
WHERE numero=vs_numdescargo;
vs_codRpta := 9000;
vs_msgRpta := 'Datos obtenidos correctamente';
ELSIF(vt_tmp=0)then
vs_codRpta := 9004;
vs_msgRpta := 'Error! No se encontro registros de monto';
ELSIF(vt_tmp>1)then
vs_codRpta := 9005;
vs_msgRpta := 'Error! Se encontraron varios registros';
ELSE
vs_codRpta := 9006;
vs_msgRpta := 'Error inesperado.';
END IF;
ELSE
vs_codRpta := 9004;
vs_msgRpta := 'Error! No se encontro el Numero de Descargo, para obtener el Monto';
END IF;
ELSIF(vt_tmp>1) then
vs_codRpta := 9001;
vs_msgRpta := 'Error! Hay mas de 1 registro con Numero DB CR [ '||vr_numero_db_cr||' ]';
ELSIF(vt_tmp<=0) then
vs_codRpta := 9002;
vs_msgRpta := 'Error! No existen registros con Numero DB CR [ '||vr_numero_db_cr||' ]';
ELSE
vs_codRpta := 9003;
vs_msgRpta := 'Error! Inesperado con Numero DB CR [ '||vr_numero_db_cr||' ]';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND then
vs_codRpta := 9007;
vs_msgRpta := '[NO DATA FOUND] Error! No existen registros en alguna de las tablas';
WHEN OTHERS then
vs_codRpta := 9008;
vs_msgRpta := '[OTHERS] Error! Inesperado en BD';
END;
Un Ej.
CREATE OR REPLACE PROCEDURE pro_ndbcr_valorespimpre (
vr_numero_db_cr IN VARCHAR2,
vs_numrecibo OUT VARCHAR2,
vs_numdescargo OUT NUMBER,
vs_montodescargo OUT NUMBER,
vs_codRpta OUT NUMBER,
vs_msgRpta OUT VARCHAR2
)
IS
--
-- Este procedimiento almecenado extrae numero de recibo, numero de descargo y monto de descargo
-- de la tabla NOTA-DB_CR para que posteriormente con estos datos se pueda proceder a imprimir
-- los concerniente con la NOTA_DB_CR. Para tal efecto necesita del campo Numero de Nota DB-CR
--
vt_tmp NUMBER;
BEGIN
vt_tmp := 0;
SELECT NVL(COUNT(*), 0) INTO vt_tmp FROM nota_db_cr WHERE numero=vr_numero_db_cr;
IF(vt_tmp=1) then
SELECT dl.numero_rc numRecibo, dl.numero_descargo numDescargo INTO vs_numrecibo, vs_numdescargo
FROM nota_db_cr n , det_liquida dl
WHERE n.numero=vr_numero_db_cr and n.numero=dl.numero_db_rc and dl.marca='A';
IF(NVL(vs_numdescargo, -777)<>-777) then
SELECT NVL(COUNT(*), 0) INTO vt_tmp FROM descargo WHERE numero=vs_numdescargo;
IF(vt_tmp=1) then
SELECT monto INTO vs_montodescargo
FROM descargo
WHERE numero=vs_numdescargo;
vs_codRpta := 9000;
vs_msgRpta := 'Datos obtenidos correctamente';
ELSIF(vt_tmp=0)then
vs_codRpta := 9004;
vs_msgRpta := 'Error! No se encontro registros de monto';
ELSIF(vt_tmp>1)then
vs_codRpta := 9005;
vs_msgRpta := 'Error! Se encontraron varios registros';
ELSE
vs_codRpta := 9006;
vs_msgRpta := 'Error inesperado.';
END IF;
ELSE
vs_codRpta := 9004;
vs_msgRpta := 'Error! No se encontro el Numero de Descargo, para obtener el Monto';
END IF;
ELSIF(vt_tmp>1) then
vs_codRpta := 9001;
vs_msgRpta := 'Error! Hay mas de 1 registro con Numero DB CR [ '||vr_numero_db_cr||' ]';
ELSIF(vt_tmp<=0) then
vs_codRpta := 9002;
vs_msgRpta := 'Error! No existen registros con Numero DB CR [ '||vr_numero_db_cr||' ]';
ELSE
vs_codRpta := 9003;
vs_msgRpta := 'Error! Inesperado con Numero DB CR [ '||vr_numero_db_cr||' ]';
END IF;
EXCEPTION
WHEN NO_DATA_FOUND then
vs_codRpta := 9007;
vs_msgRpta := '[NO DATA FOUND] Error! No existen registros en alguna de las tablas';
WHEN OTHERS then
vs_codRpta := 9008;
vs_msgRpta := '[OTHERS] Error! Inesperado en BD';
END;