Si el procedimiento es llamado desde 4gl tenemos que encontrar la forma de capturar esa excepción y mostrar un mensaje en pantalla.
Pongamos un ejemplo de un procedimiento que recibe un parametro con un pedido de un determinado articulo. Lo primero que hace es comprobar que hay suficiente stock para poder atenderlo y, en caso contrario, provocar una excepcion.
CREATE PROCEDURE 'user'.sp_controlStock (
articulo LIKE tablaArticulos.id_articulo,
cantidad INTEGER)
DEFINE stockArticulo LIKE tablaAlmacen.stockDisponible;
SELECT stockDisponible INTO stockArticulo
FROM tablaAlmacen
WHERE id_articulo = articulo;
IF stockArticulo < cantidad THEN
RAISE EXCEPCION -746,0,'No hay stock disponible!!';
END IF;
END PROCEDURE;
Para controlar la excepcion -746 desde 4gl tendriamos que deshabilitar el control de las excepcion con WHENEVER ERROR CONTINUE, tratar el error que deseamos controlar y por ultimo volver a habilitar el control de las excepciones.
WHENEVER ERROR CONTINUE
EXECUTE sp_controlStock USING articulo, cantidad
IF STATUS = 0 THEN
pedidoOk =TRUE
ELSE
IF STATUS = -746 THEN
MESSAGE "No hay stock disponible para atender el pedido!!"
pedidoOk = FALSE
ELSE
CALL controlErrores()
END IF
END IF
WHENEVER ERROR CALL controlErrores
Hasta la próxima...