¿Cómo manipular errores en pl sql?
Ojala me puedas ayudar tengo el siguiente problema, mediante un trigger válido un valor por que no sea mayor que y y la idea es que si lo es o es igual no debe insertar ni hacer nada, lo que tengo es lo siguiente:
Create or replace
TRIGGER TRI_CTL_CLIENTE
before INSERT OR DELETE ON CLIENTE
FOR EACH ROW
declare
maximo_suc number;
num_clientes number;
fallo EXCEPTION;
BEGIN
IF INSERTING THEN
select suc_cmax , suc_nro_cli into maximo_suc, num_clientes from sucursal where suc_cod=:NEW.CLI_SUCURSAL;
if maximo_suc > num_clientes then
UPDATE SUCURSAL
SET SUC_NRO_CLI=NVL(SUC_NRO_CLI,0)+1
WHERE SUC_COD=:NEW.CLI_SUCURSAL;
else
RAISE fallo;
end if;
end if;
IF DELETING THEN
UPDATE SUCURSAL
SET SUC_NRO_CLI=NVL(SUC_NRO_CLI,0)-1
WHERE SUC_COD=:OLD.CLI_SUCURSAL;
end if;
EXCEPTION
WHEN fallo THEN
dbms_output.put_line (' valor maximo superado ' ||SYSDATE);
RAISE;
END;
El error que arroja es:
Informe de error:
Error SQL: ORA-06510: PL/SQL: excepción definida por el usuario no tratada
ORA-06512: en "TRI_CTL_CLIENTE", línea 28
ORA-04088: error durante la ejecución del disparador 'TRI_CTL_CLIENTE'
06510. 00000 - "PL/SQL: unhandled user-defined exception"
*Cause: A user-defined exception was raised by PL/SQL code, but
not handled.
*Action: Fix the problem causing the exception or write an exception
handler for this condition. Or you may need to contact your
Application administrator or DBA.
Claro q no agrega al fulano, es decir no lo ingresa por lo tanto desde el punto de vista de la base de datos no ingreso un cliente q superaba el maximo de clientes para esa sucursal.
Create or replace
TRIGGER TRI_CTL_CLIENTE
before INSERT OR DELETE ON CLIENTE
FOR EACH ROW
declare
maximo_suc number;
num_clientes number;
fallo EXCEPTION;
BEGIN
IF INSERTING THEN
select suc_cmax , suc_nro_cli into maximo_suc, num_clientes from sucursal where suc_cod=:NEW.CLI_SUCURSAL;
if maximo_suc > num_clientes then
UPDATE SUCURSAL
SET SUC_NRO_CLI=NVL(SUC_NRO_CLI,0)+1
WHERE SUC_COD=:NEW.CLI_SUCURSAL;
else
RAISE fallo;
end if;
end if;
IF DELETING THEN
UPDATE SUCURSAL
SET SUC_NRO_CLI=NVL(SUC_NRO_CLI,0)-1
WHERE SUC_COD=:OLD.CLI_SUCURSAL;
end if;
EXCEPTION
WHEN fallo THEN
dbms_output.put_line (' valor maximo superado ' ||SYSDATE);
RAISE;
END;
El error que arroja es:
Informe de error:
Error SQL: ORA-06510: PL/SQL: excepción definida por el usuario no tratada
ORA-06512: en "TRI_CTL_CLIENTE", línea 28
ORA-04088: error durante la ejecución del disparador 'TRI_CTL_CLIENTE'
06510. 00000 - "PL/SQL: unhandled user-defined exception"
*Cause: A user-defined exception was raised by PL/SQL code, but
not handled.
*Action: Fix the problem causing the exception or write an exception
handler for this condition. Or you may need to contact your
Application administrator or DBA.
Claro q no agrega al fulano, es decir no lo ingresa por lo tanto desde el punto de vista de la base de datos no ingreso un cliente q superaba el maximo de clientes para esa sucursal.
1 Respuesta
Respuesta de sindimad
1