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