Cuando queremos insertar, actualizar, borrar o consultar una tabla de una Base de Datos externa puede ser que el comando que ejecutamos haya tenido éxito o no.
¿Cómo podemos saberlo?
Hay tres formas de averiguarlo:
- Capturando la excepción
- Enviando un SELECT a la Base de Datos externa y verificando el valor retornado
- Haciendo que el comando externo nos devuelva un valor
En general la mejor opción es la 3. porque escribimos menos (capturar la excepción nos obligará a escribir más) y no necesitamos consultar a la Base de Datos externa (esas consultas son lentas).
Ejemplo. Verificando si un INSERT tuvo éxito
CREATE PROCEDURE INSERT_EXTERNO AS DECLARE VARIABLE lnCodSuc SMALLINT; DECLARE VARIABLE lnIdenti SMALLINT; DECLARE VARIABLE lcNombre VARCHAR(40); DECLARE VARIABLE lcBaseDatos VARCHAR(1024); DECLARE VARIABLE lcComando VARCHAR(1024); DECLARE VARIABLE lcUsuario CHAR(8); DECLARE VARIABLE lcContrasena VARCHAR(32); BEGIN lnCodSuc = 0; lnIdenti = 101; lcNombre = 'PRUEBA DE BANCOS'; lcBaseDatos = 'E:\SQL\SQL_CONTA\DATABASES\OBRASCIVILES.FDB'; lcUsuario = 'SYSDBA'; lcContrasena = 'masterkey'; lcComando = 'INSERT INTO BANCOS(BAN_CODSUC, BAN_IDENTI, BAN_NOMBRE) VALUES(?, ?, ?) RETURNING BAN_IDENTI'; EXECUTE STATEMENT (lcComando) (:lnCodSuc, :lnIdenti, :lcNombre) ON EXTERNAL :lcBaseDatos AS USER :lcUsuario PASSWORD :lcContrasena INTO :lnIdenti; IF (lnIdenti IS NOT NULL) THEN BEGIN -- El INSERT se realizó exitosamente -- Escribir los comandos aquí END WHEN ANY DO BEGIN -- Aquí se procesan los errores END END;
Este stored procedure trata de insertarle una fila a la tabla BANCOS de una Base de Datos externa. ¿Lo consiguió? Quizás sí, quizás no. Podría haber fallado si la Primary Key está duplicada, o si en una Foreign Key no existe la fila padre, o si ya existe la Unique Key, etc., etc., etc.
Si tuvo éxito entonces en la variable local lnIdenti tendremos un número, si no tuvo éxito tendremos NULL.
Y de esa forma podremos saber si el comando que ejecutamos en la Base de Datos externa tuvo éxito o no: retornando un valor y comparándolo con NULL. Si el valor retornado no es NULL entonces tuvo éxito.
Desde luego que no es obligatorio retornar un número, también podría ser un carácter, una fecha, etc., lo importante es que si la operación se realizó con éxito retorne algo que no sea NULL.
Artículos relacionados:
Importar datos desde otra Base de Datos
Insertar, modificar o borrar filas en una Base de Datos externa
Consultas a bases de datos externas
Haciendo consultas que involucren a dos tablas de dos bases de datos diferentes
Insertando datos en tablas externas
Capturando excepciones. Códigos de error predeterminados
Capturando excepciones del usuario
Deja un comentario