Oracle - Error en Store Procedure

 
Vista:

Error en Store Procedure

Publicado por DANIEL M (2 intervenciones) el 23/02/2007 22:44:24
Hola, hice un paquete en el TOAD con el cual administro mi BD Oracle 10g. Este paquete lo voy a llamar desde mi codigo en java pero me marca un error el último EXCEPTION del cuerpo del paquete:

PLS-00103: Encountered the symbol "EXCEPTION" when expecting one of the following:

begin case declare end exit for goto if loop mod null pragma
raise return select update while with <an identif

El codigo PL-SQL es el siguiente:

CREATE OR REPLACE PACKAGE pack_gastos IS

TYPE c_cat_depto_type IS REF CURSOR;

FUNCTION f_mant_cat_deptos (
v_accion VARCHAR2,
v_cvedpto gto_departamento.CLAVE_DEPARTAMENTO%TYPE,
v_descripcion gto_departamento.DESCRIPCION%TYPE,
v_domicilio gto_departamento.DOMICILIO%TYPE,
v_telefono gto_departamento.TELEFONO%TYPE,
v_responsable gto_departamento.RESPONSABLE%TYPE,
v_fecha_alta VARCHAR2,
v_fecha_baja VARCHAR2,
v_codigo VARCHAR2,
v_numero_registros OUT NUMBER,
c_cat_depto OUT c_cat_depto_type
) RETURN NUMBER;

END pack_gastos;
/

CREATE OR REPLACE PACKAGE BODY pack_gastos IS

FUNCTION f_mant_cat_deptos (
v_accion VARCHAR2,
v_cvedpto gto_departamento.CLAVE_DEPARTAMENTO%TYPE,
v_descripcion gto_departamento.DESCRIPCION%TYPE,
v_domicilio gto_departamento.DOMICILIO%TYPE,
v_telefono gto_departamento.TELEFONO%TYPE,
v_responsable gto_departamento.RESPONSABLE%TYPE,
v_fecha_alta VARCHAR2,
v_fecha_baja VARCHAR2,
v_codigo VARCHAR2,
v_numero_registros OUT NUMBER,
c_cat_depto OUT c_cat_depto_type
) RETURN NUMBER IS
v_clave NUMBER;
BEGIN
IF v_accion = 'L' THEN
BEGIN
SELECT COUNT(*) INTO v_numero_registros
FROM GTO_DEPARTAMENTO;
EXCEPTION
WHEN NO_DATA_FOUND THEN
v_numero_registros := 0;
END;
IF v_numero_registros = 0 THEN
RETURN -1;
ELSE
OPEN c_cat_depto FOR
SELECT A.CLAVE_DEPARTAMENTO,
A.DESCRIPCION,
A.DOMICILIO,
A.TELEFONO,
A.RESPONSABLE,
TO_CHAR(A.FECHA_ALTA,'DD/MM/YYYY'),
TO_CHAR(A.FECHA_BAJA,'DD/MM/YYYY'),
A.CODIGO
FROM GTO_DEPARTAMENTO A
ORDER BY CLAVE_DEPARTAMENTO;
END IF;
ELSIF v_accion = 'I' THEN
v_numero_registros := 0;
SELECT NVL(MAX(CLAVE_DEPARTAMENTO)+1,1)
INTO v_clave
FROM GTO_DEPARTAMENTO;
INSERT INTO GTO_DEPARTAMENTO (
CLAVE_DEPARTAMENTO,
DESCRIPCION,
DOMICILIO,
TELEFONO,
RESPONSABLE,
FECHA_ALTA,
FECHA_BAJA,
CODIGO)

VALUES (v_clave,
v_descripcion,
v_domicilio,
v_telefono,
v_responsable,
TO_DATE(v_fecha_alta,'DD/MM/YYYY'),
TO_DATE(v_fecha_baja,'DD/MM/YYYY'),
v_codigo);

ELSE IF v_accion = 'M' THEN
v_numero_registros := 0;
UPDATE GTO_DEPARTAMENTO A
SET A.DESCRIPCION = v_descripcion,
A.DOMICILIO = v_domicilio,
A.TELEFONO = v_telefono,
A.RESPONSABLE = v_responsable,
A.FECHA_ALTA = TO_DATE(v_fecha_alta,'DD/MM/YYYY'),
A.FECHA_BAJA = TO_DATE(v_fecha_baja,'DD/MM/YYYY'),
A.CODIGO = v_codigo
WHERE A.CLAVE_DEPARTAMENTO = v_cvedpto;
ELSIF v_accion = 'E' THEN
v_numero_registros := 0;
DELETE GTO_DEPARTAMENTO WHERE CLAVE_DEPARTAMENTO = v_cvedpto; END IF;
RETURN 1;
EXCEPTION //AQUI MARCA EL ERROR

WHEN OTHERS THEN
RETURN -1;
END f_mant_cat_deptos;
END pack_gastos;
/

Desde java lo llamo de esta forma:

try {
conn = getConnection();
commonCS = conn.prepareCall("{? = call pack_gastos.f_mant_cat_deptos(?,?,?,?,?,?,?,?,?,?,?)}");

No encuentro la forma de solucionarlo espero puedan ayudarme. Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Error en Store Procedure

Publicado por Hector (127 intervenciones) el 24/02/2007 18:39:22
Debes contar que las parejas If/End If; Begin/End; Loop/En Loop esten completos.

Espero que no lo tomes a mal, pero la identacion (el espaciado horizontal) de tu codigo te ayudara a encontrar cual es el problema.

Por favor dejame saber si puedo ayudarte en algo mas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar