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:

  1. Capturando la excepción
  2. Enviando un SELECT a la Base de Datos externa y verificando el valor retornado
  3. 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

Entendiendo las excepciones

Capturando excepciones

Capturando excepciones. Códigos de error predeterminados

Capturando excepciones del usuario

El índice del blog Firebird21