Procedimientos almacenados

Miconsa
26 de Marzo del 2010
Hola amigos me podrian informar de como crear procedimientos almacenados en oracle 10g Express Edition

J@v13r
11 de Mayo del 2010
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;