Flavia, ese procedure sale con un raise exception? Porque el -746 es para formatear los errores y sacar un mensaje entendible por el usuario…
Una cosa que el procedure devuelva valores y lso errores se capturen:
CREATE PROCEDURE .....() RETURNING integer, varchar(255);
ON EXCEPTION IN (-391)
RETURN -1, 'Error de clave primaria de la tabla xxxxxxx';
END EXCEPTION;
BEGIN
.......
RETURN 1, 'OK';
END;
En este caso el procedure no sale con error, es decir sale con un error pero que solo lo entiende quien ejecutó el procedure, no es un error de base de datos.
En este otro ejemplo si hubiere un error en el procedure, el mismo captura y sale del procedure con un RAISE EXCEPTION, con lo cual desde donde se ejecutó el procedure este da un error de base de datos, que en este caso va el codigo de error en sql_error, en otros casos el error se formatea a un mensaje mas adecuado al usuario, como ser:
RAISE EXCEPTION -746, 0, ‘Error. El alumno X no actualizó los datos censales’;
CREATE PROCEDURE .....() RETURNING integer, varchar(255);
-- blk de excepciones
ON EXCEPTION SET sql_err, isam_err, error_info
RAISE EXCEPTION sql_err, isam_err, error_info;
END EXCEPTION;
BEGIN
.......
END;
o este tambien sale con un raise exception:
CREATE PROCEDURE abc() RETURNING integer, varchar(255);
-- blk de excepciones
ON EXCEPTION SET sql_err, isam_err, error_info
RAISE EXCEPTION -746, isam_err, 'Error en el procedure abc' ;
END EXCEPTION;
BEGIN
.......
END;
El codigo -746 lo que permite es reemplazar el error_info por el mensaje que se desee enviar ante un error.
En los casos de procedures que no tengan captura de errores con el bloque “on exception … end exception;” si hubiere un error se corta la ejecución del procedure y sale con error con un “Raise Exception”.