SQL - ayuda

 
Vista:

ayuda

Publicado por nueva (1 intervención) el 26/04/2006 14:39:46
HOla a todos.
Soy nueva en esto de PL-sql y necesito ayuda.
EStoy realizando una función y al compilar me dá el siguiente error:

FUNCTION TRAIN4.F_UPDATE_AJUSTES
On line: 76
PLS-00103: Encountered the symbol "EXCEPTION"

El código es el siguiente:

CREATE OR REPLACE FUNCTION f_updateAjustes (p_rowid IN INTEGER, -- Rowid del reg en ADJUSTMENT
p_billing IN INTEGER) -- Cta. billing en ADJUSTMENT
RETURN BOOLEAN IS -- Si todo fue correctamente devolvera un TRUE sino un FALSE.

errno INTEGER;
errmsg CHAR(200);
hay NUMBER(2);
noEncuentraCuenta EXCEPTION;
b_Resultado BOOLEAN; -- VARIABLE de salida, si todo fue bien TRUE, caso contrario FALSE.

BEGIN
DBMS_OUTPUT.ENABLE (1000000);
SELECT count(*) into hay FROM AJUSTESCALIDADSERVICIO
WHERE rowid_adjustment = p_rowid and cta_billing =p_billing;
EXCEPTION
WHEN NO_DATA_FOUND THEN
begin
SELECT count(*) into hay FROM AJUSTESEMPRESAS
WHERE rowid_adjustment = p_rowid and cta_billing = p_billing;
EXCEPTION
WHEN NO_DATA_FOUND THEN
begin
SELECT count(*) into hay FROM AJUSTESRURALPROMOCIONES
WHERE rowid_adjustment = p_rowid and cta_billing = p_billing;
EXCEPTION
WHEN NO_DATA_FOUND THEN
begin
hay:=0;
RAISE noEncuentraCuenta;
IF (hay<>0) THEN
tabla:=3;
End IF;
end;
WHEN OTHERS THEN
begin
IF (hay<>0) THEN
tabla:=2;
END IF;
end;
end;
WHEN OTHERS THEN
BEGIN
IF (hay<>0) THEN
tabla:=1;
END IF;
IF (hay <> 0) THEN
begin
--Lanzamos la actualización en la tabla correspondiente
IF (tabla=1) THEN
UPDATE AJUSTESCALIDADSERVICIO SET STATUS='CG' WHERE rowid_adjustment = p_rowid and cta_billing = p_billing;
ELSIF (tabla=2) THEN
UPDATE AJUSTESEMPRESAS SET STATUS='CG' WHERE rowid_adjustment = p_rowid and cta_billing = p_billing;
ELSIF (tabla=3) THEN
UPDATE AJUSTESRURALPROMOCIONES SET STATUS='CG' WHERE rowid_adjustment = p_rowid and cta_billing = p_billing;
END IF;
DBMS_OUTPUT.PUT_LINE ('Actualización realizada correctamente');
-- Si todo salio correctamente, devuelve el Código del Cliente y un True de correcto.
b_Resultado := TRUE;
end;
ELSE
begin
DBMS_OUTPUT.PUT_LINE('1: Fallo al buscar la cuenta en las tablas de Ajustes');
DBMS_OUTPUT.PUT_LINE('1: Numero Error:' || sqlcode);
DBMS_OUTPUT.PUT_LINE('1: Mensaje de Error:' || sqlerrm);
b_Resultado := FALSE;
end;
END IF;
END;
WHEN OTHERS THEN
begin
DBMS_OUTPUT.PUT_LINE('1: Fallo al buscar la cuenta en las tablas de Ajustes');
DBMS_OUTPUT.PUT_LINE('1: Numero Error:' || sqlcode);
DBMS_OUTPUT.PUT_LINE('1: Mensaje de Error:' || sqlerrm);
b_Resultado := FALSE;
end;

END;

RETURN b_Resultado;

EXCEPTION
WHEN noEncuentraCuenta THEN
begin
RAISE_APPLICATION_ERROR(errno, errmsg); --Muestra el mensaje por pantalla
b_Resultado := FALSE;
RETURN b_Resultado;
end;
WHEN noEncuentraRowID THEN
begin
RAISE_APPLICATION_ERROR(errno, errmsg); --Muestra el mensaje por pantalla
b_Resultado := FALSE;
RETURN b_Resultado;
end;
WHEN OTHERS THEN
begin
-- mensajes de pantalla para depuracion
DBMS_OUTPUT.PUT_LINE('9: NO se encuentra la cuenta en las tablas de Ajustes');
DBMS_OUTPUT.PUT_LINE('9: Numero Error:' || sqlcode);
DBMS_OUTPUT.PUT_LINE('9: Mensaje de Error:' || sqlerrm);
RAISE;
end;
END f_updateAjustes
/

he revisado los begin-end y creo que no me falta ninguno.
Alguien puede 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