FirebirdSQL logo

SET DECFLOAT TRAPS

L’instruction SET DECFLOAT TRAPS modifie le comportement d’erreur des opérations avec le type DECFLOAT.

Par défaut, des exceptions sont générées pour les situations suivantes : DIVISION_BY_ZERO,INVALID_OPERATION,OVERFLOW ;cette valeur par défaut correspond au comportement défini dans la norme SQL : 2016 pour DECFLOAT.Cet opérateur permet de contrôler si certaines conditions exceptionnelles entraînent une erreur ("trap") ou un échec.traitement alternatif (par exemple, la perte de signification renvoie 0 si elle n’est pas définie, ou un dépassement renvoie l’infini).La configuration initiale de la connexion peut également être spécifiée en utilisant la balise DPB isc_dpb_decfloat_traps.avec les valeurs trap_opt souhaitées, séparées par des virgules, sous forme de chaîne de caractères.

Variantes de pièges autorisées (conditions exceptionnelles) :

Division_by_zero

(par défaut)

Inexact

 — 

Invalid_operation

(par défaut)

Overflow

(par défaut)

Underflow

 — 

Example 1. Définir les situations pour lesquelles une exception sera générée
SET DECFLOAT TRAPS TO Division_by_zero, Inexact, Invalid_operation, Overflow, Underflow;

Temps mort

Firebird dispose de deux types de timeout :

  • le timeout d’inactivité de la connexion ;

  • le timeout des instructions SQL.

Délai d’attente pour les instructions SQL

Cette fonctionnalité vous permet de mettre automatiquement fin à l’exécution d’une instruction SQL si elle dépasse la valeur de délai d’attente spécifiée.

Cette fonction peut être utile pour :

  • Administrateurs de bases de données. Ils obtiennent un outil permettant de limiter le temps d’exécution des requêtes lourdes qui consomment beaucoup de ressources ;

  • Développeurs d’applications. Ils peuvent utiliser les délais d’exécution des instructions SQL lors de la rédaction et du débogage de requêtes complexes dont le temps d’exécution est inconnu ;

  • Les testeurs, qui peuvent utiliser les délais d’exécution des instructions SQL pour détecter les requêtes longues et fournir un temps d’exécution limité de la suite de tests.

Cette fonctionnalité fonctionne comme suit.Lorsque l’exécution d’une instruction commence (ou qu’un curseur est ouvert), Firebird démarre une minuterie spéciale.Le fait de récupérer les enregistrements ne remet pas le compteur à zéro.La minuterie s’arrête si l’instruction SQL est terminée ou si le dernier enregistrement est récupéré.

Lorsque le délai d’attente expire :

  • Si l’exécution d’une instruction SQL est active, elle s’arrête au moment spécifié.

  • Si la déclaration SQL n’est pas active à ce moment-là (par exemple, entre deux extractions), elle sera marquée comme annulée, l’extraction suivante sera interrompue et une erreur sera renvoyée.

La valeur du délai d’attente peut être définie :

  • Au niveau de la base de données. La valeur du StatementTimeout peut être définie dans firebird.conf (ou databases.conf) par l’administrateur de la base de données. Le champ d’application est constitué de toutes les déclarations dans toutes les connexions. Le paramètre StatementTimeout définit le délai en secondes, après lequel les déclarations SQL seront annulées. Un zéro signifie que le délai d’attente n’est pas défini. La valeur par défaut est 0.

  • Au niveau de la connexion. Peut être défini en utilisant l’API (en millisecondes) ou avec l’opérateur SQL SET STATEMENT TIMEOUT. La portée de la connexion actuelle.

  • Au niveau de l’opérateur. Peut être défini en utilisant l’API (en millisecondes). La portée de l’instruction SQL actuelle.

La valeur effective du délai d’attente de l’opérateur SQL est calculée chaque fois que l’opérateur SQL est lancé (le curseur est ouvert) comme suit

  • si le délai d’attente n’est pas défini au niveau de l’opérateur, la valeur du délai d’attente au niveau de la connexion sera utilisée ;

  • Si le délai d’attente n’est pas défini au niveau de la connexion, la valeur du délai d’attente de la base de données sera utilisée ;

  • La valeur du délai d’attente ne peut pas être supérieure à la valeur du délai d’attente définie au niveau de la base de données. Ainsi, la valeur du délai d’attente peut être remplacée par le développeur d’applications dans les zones inférieures, mais elle ne peut pas dépasser les limites fixées par le DBA dans la configuration.

Un délai d’attente de zéro ne signifie pas qu’il n’y a pas de délai d’attente, mais simplement que la minuterie d’exécution de l’instruction n’est pas lancée.

Bien que le délai d’attente SQL puisse être défini en millisecondes, la précision absolue n’est pas garantie. Elle peut être moins précise en cas de forte charge. La seule garantie que Firebird peut donner est que le délai d’attente ne s’exécutera pas avant le temps spécifié. Une application cliente peut attendre plus longtemps que la valeur du délai d’attente définie si le moteur Firebird doit annuler de nombreuses actions liées à l’annulation de l’opérateur.

Le délai d’attente de l’opérateur est ignoré pour toutes les requêtes internes utilisées par le moteur Firebird. De plus, le délai d’attente est ignoré pour les déclarations DDL.

SET STATEMENT TIMEOUT

Destination

Définir un délai d’attente au niveau de la connexion pour l’exécution des instructions SQL.

Disponible en

DSQL

Syntaxe:
SET STATEMENT TIMEOUT value [HOUR | MINUTE | SECOND | MILLISECOND]
Table 1. Paramètres de l’opérateur SET STATEMENT TIMEOUT
Paramètre Description

value

La valeur du délai d’exécution des instructions SQL dans les unités de temps spécifiées. Si aucune unité de temps n’est spécifiée, la valeur par défaut du délai d’exécution est mesurée en secondes.

Définit la valeur du délai d’exécution des instructions SQL au niveau de la connexion actuelle. Si aucune unité de temps n’est spécifiée, le délai par défaut sera compté en secondes.

Note

Cette instruction SQL fonctionne en dehors du mécanisme de contrôle des transactions et prend effet immédiatement.

Example 1. Définition d’un délai d’attente pour les instructions SQL
SET STATEMENT TIMEOUT 2 MINUTE
Note

L’outil interactif isql prend également en charge la commande :

SET LOCAL_TIMEOUT int

Cette commande vous permet de définir un délai d’attente (en millisecondes) pour l’instruction suivante. Une fois l’instruction SQL exécutée, il est automatiquement remis à zéro.