FirebirdSQL logo

RESETTING

Disponible en

PSQL

Syntaxe
RESETTING
type de résultat de retour

BOOLEAN

La variable contextuelle RESETTING n’est disponible que pour les déclencheurs d’événements ON CONNECT et ON DISCONNECT et peut être utilisée partout où un prédicat logique peut être utilisé. La variable système RESETTING permet de détecter quand un déclencheur de base de données est déclenché par une réinitialisation de session, par exemple avec l’instruction ALTER SESSION RESET. Sa valeur est TRUE si une réinitialisation de session est effectuée, et FALSE sinon.

Example 1. Utilisation d’une variable RESETTING
...
IF (RESETTING) THEN
BEGIN
  -- la session est réinitialisée
END
...
Voir aussi :

ALTER SESSION RESET.

ROW_COUNT

Disponible en

PSQL

Syntaxe
ROW_COUNT
type de résultat de retour

BIGINT

La variable contextuelle ROW_COUNT contient le nombre de lignes affectées par la dernière instruction DML.(INSERT, UPDATE, DELETE, SELECT ou FETCH) dans le déclencheur, la procédure stockée ou le bloc exécutable en cours.

Comportement avec SELECT et FETCH :

  • Après avoir exécuté une requête singleton SELECT (une requête qui ne peut retourner plus d’une ligne de données), ROW_COUNT est 1 si une chaîne de données a été récupérée et 0 sinon ;

  • Dans la boucle FOR SELECT, la variable ROW_COUNT est incrémentée à chaque itération (en commençant par 0 comme première valeur) ;

  • Après la sélection (FETCH) du curseur, ROW_COUNT vaut 1 si une chaîne de données a été récupérée et 0 sinon. La sélection de plusieurs enregistrements à partir du même curseur n’incrémente pas ROW_COUNT après 1.

Important

La variable ROW_COUNT ne peut pas être utilisée pour déterminer le nombre de lignes affectées par les instructions EXECUTE STATEMENT ou EXECUTE PROCEDURE. Pour l’instruction MERGE, la variable ROW_COUNT contiendra 0 ou 1, même si plus d’enregistrements ont été affectés.

Warning

N’utilisez pas la variable ROW_COUNT dans les instructions DML. En effet, cette variable remet sa valeur à 0 avant l’exécution de toute instruction DML, et vous risquez donc de ne pas obtenir ce que vous attendez.

...
UPDATE t2 SET
    evt='upd',
    old_id = old.id, old_x = old.x,
    new_id = new.id, new_x = new.x
WHERE new_id = old.id;

INSERT INTO t2log(evt, affected_rows) VALUES('upd', ROW_COUNT);
...

Dans l’exemple ci-dessus, la colonne affected_rows sera écrite avec des valeurs nulles, même si l’instruction UPDATE a été affectée. Pour corriger cette erreur, la valeur de la variable de contexte ROW_COUNT doit être enregistrée dans une variable locale du module PSQL et utilisée dans une instruction DML avec cette variable locale.

...
DECLARE rc INT;
...
UPDATE t2 SET
    evt='upd',
    old_id = old.id, old_x = old.x,
    new_id = new.id, new_x = new.x
WHERE new_id = old.id;

rc = ROW_COUNT;
INSERT INTO t2log(evt, affected_rows) VALUES('upd', rc);
...
Example 1. Utilisation d’une variable ROW_COUNT
...
UPDATE Figures SET Number = 0 WHERE id = :id;
IF (row_count = 0) THEN
  INSERT INTO Figures (id, Number)
  VALUES (:id, 0);
...

SQLCODE

Disponible en

PSQL

Syntaxe
SQLCODE
type de résultat de retour

INTEGER

Dans les blocs de gestion d’erreur WHEN …​ DO la variable contextuelle SQLCODE contient le code d’erreur SQL actuel.Avant Firebird 2.0, la valeur de SQLCODE ne pouvait être récupérée que dans les blocs d’erreur WHEN SQLCODE et WHEN ANY.Il peut maintenant être non nul dans les blocs WHEN GDSCODE et WHEN EXCEPTION à condition que l’erreur qui a déclenché le bloc corresponde au code d’erreur SQL.En dehors des gestionnaires d’erreurs, SQLCODE est toujours 0 et en dehors de PSQL, il n’existe pas du tout.

Example 1. Utilisation d’une variable SQLCODE
...
WHEN ANY DO
BEGIN
  IF (SQLCODE <> 0) THEN
    MSG = 'Erreur SQL détectée !';
  ELSE
    MSG = 'Il n''y a pas d''erreur !';
  EXCEPTION EX_CUSTOM MSG;
END
...

SQLSTATE

Disponible en

PSQL

Syntaxe
SQLSTATE
type de résultat de retour

CHAR(5)

Dans les blocs de gestion d’erreur WHEN …​ DO variable de contexte SQLSTATE variable contient 5 caractères du code d’état compatible SQL-2003 — passé par la déclaration causant l’erreur.En dehors des gestionnaires d’erreurs, SQLSTATE est toujours '00000' et en dehors de PSQL, il n’existe pas du tout.

Note
  • SQLSTATE est destiné à remplacer SQLCODE. Ce dernier est maintenant obsolète et sera supprimé dans les futures versions de Firebird ;

  • Tout code SQLSTATE se compose de deux caractères de classe et de trois caractères de sous-classe. Les classes 00 (exécution réussie), 01 (avertissement) et 02 (pas de données) représentent les conditions d’achèvement. Chaque code d’état en dehors de ces classes est une exception. Comme les classes 00, 01 et 02 ne provoquent pas d’erreur, elles ne seront jamais détectées dans la variable SQLSTATE.

Example 1. Utilisation d’une variable SQLSTATE
WHEN ANY DO
BEGIN
  MSG = CASE SQLSTATE
          WHEN '22003' THEN
            'Le nombre est hors de portée !'
          WHEN '22012' THEN
            'Division par zéro !'
          WHEN '23000' THEN
            'Violation du control d''intégrité !'
          ELSE 'Il n''y a pas d''erreurs ! SQLSTATE = ' || SQLSTATE;
        END;
  EXCEPTION EX_CUSTOM MSG;
END