

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Gestion du traitement des erreurs Babelfish avec des trappes de secours
<a name="babelfish-strict"></a>

Dans la mesure du possible, Babelfish imite le comportement de SQL en ce qui concerne le flux de contrôle et l’état de transaction. Lorsque Babelfish rencontre une erreur, il renvoie un code d’erreur semblable au code d’erreur SQL Server. Si Babelfish ne peut pas mapper l’erreur à un code SQL Server, il renvoie un code d’erreur fixe (`33557097`) et prend des mesures spécifiques en fonction du type d’erreur, comme suit :
+ Pour les erreurs de compilation, Babelfish annule la transaction.
+ Pour les erreurs d’exécution, Babelfish termine le lot et annule la transaction.
+ Pour une erreur de protocole entre le client et le serveur, la transaction n’est pas annulée.

Si un code d’erreur ne peut pas être mappé à un code équivalent et que le code d’une erreur similaire est disponible, il est mappé au code alternatif. Par exemple, les comportements à l’origine des codes SQL Server `8143` et `8144`sont tous deux mappés au code `8143`.

Les erreurs qui ne peuvent pas être mappées ne respectent pas une construction `TRY... CATCH`.

Vous pouvez utiliser `@@ERROR` pour renvoyer un code d’erreur SQL Server, ou la fonction `@@PGERROR` pour renvoyer un code d’erreur PostgreSQL. Vous pouvez également utiliser la fonction `fn_mapped_system_error_list` pour renvoyer une liste de codes d’erreur mappés. Pour en savoir plus sur les codes d’erreur PostgreSQL, consultez [le site Internet PostgreSQL](https://www.postgresql.org/docs/current/errcodes-appendix.html).

## Modification des paramètres de la trappe de secours de Babelfish
<a name="babelfish-escape_hatches"></a>

Pour gérer les déclarations susceptibles d’échouer, Babelfish définit certaines options appelées trappes de secours. Une *trappe de secours* est une option qui spécifie le comportement de Babelfish lorsqu’il rencontre une fonction ou une syntaxe non prise en charge.

Vous pouvez utiliser la procédure stockée `sp_babelfish_configure` pour contrôler les paramètres d’une trappe de secours. Utilisez le script pour définir la trappe de secours sur `ignore` ou `strict`. Si elle est définie sur `strict`, Babelfish renvoie une erreur que vous devez corriger avant de continuer.

Pour appliquer les changements à la session en cours et au niveau du cluster, incluez le mot-clé `server`.

Procédez comme suit :
+ Pour répertorier toutes les trappes de secours et leur statut, ainsi que des informations relatives à leur utilisation, exécutez `sp_babelfish_configure`.
+ Pour répertorier les trappes d'échappement nommées et leurs valeurs, pour la session en cours ou à l'échelle du cluster, exécutez la commande `sp_babelfish_configure 'hatch_name'` où `hatch_name` est l'identifiant d'une ou de plusieurs trappes d'échappement. *hatch\$1name*peut utiliser des caractères génériques SQL, tels que « % ».
+ Pour définir une ou plusieurs trappes de secours sur la valeur spécifiée, exécutez `sp_babelfish_configure ['hatch_name' [, 'strict'|'ignore' [, 'server']]`. Pour rendre les paramètres permanents à l’échelle d’un cluster, ajoutez le mot-clé `server`, comme indiqué ci-après :

  ```
  EXECUTE sp_babelfish_configure 'escape_hatch_unique_constraint', 'ignore', 'server'
  ```

  Pour les appliquer à la session en cours uniquement, n’utilisez pas `server`.
+ Pour remettre toutes les trappes de secours à leur valeur par défaut, lancez `sp_babelfish_configure 'default'` (Babelfish 1.2.0 et versions ultérieures). 

La chaîne identifiant la (ou les) trappe(s) peut inclure des caractères génériques SQL. L’exemple suivant définit toutes les trappes de secours syntaxiques à ignorer (`ignore`) pour le cluster Aurora PostgreSQL

```
EXECUTE sp_babelfish_configure '%', 'ignore', 'server'
```

Dans le tableau suivant, vous trouverez les descriptions et les valeurs par défaut des trappes de secours prédéfinies par Babelfish.


| Trappe de secours | Description | Par défaut | 
| --- | --- | --- | 
| escape\$1hatch\$1checkpoint |  Autorise l’utilisation de l’instruction CHECKPOINT dans le code procédural, mais l’instruction CHECKPOINT n’est actuellement pas implémentée.  |  ignore  | 
| escape\$1hatch\$1constraint\$1name\$1for\$1default |  Détermine le comportement de Babelfish pour les noms de contraintes par défaut.  |  ignore  | 
| escape\$1hatch\$1database\$1misc\$1options |  Détermine le comportement de Babelfish pour les options suivantes sur CREATE DATABASE: CONTAINMENT, DB\$1CHAINING, TRUSTWORTHY, PERSISTENT\$1LOG\$1BUFFER.  |  ignore  | 
| escape\$1hatch\$1for\$1replication |  Détermine le comportement de Babelfish pour la clause [NOT] FOR REPLICATION lors de la création ou de la modification d’une table.  |  strict  | 
| escape\$1hatch\$1fulltext |  Détermine le comportement de Babelfish pour les fonctions FULLTEXT telles que DEFAULT\$1FULLTEXT\$1LANGUAGE dans CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX ou sp\$1fulltext\$1database.  |  ignore  | 
| escape\$1hatch\$1ignore\$1dup\$1key |  Contrôle le comportement de Babelfish lié à CREATE/ALTER TABLE et CREATE INDEX. Lorsque la valeur IGNORE\$1DUP\$1KEY=ON, provoque une erreur lorsqu’elle est définie sur `strict` (la valeur par défaut) ou ignore l’erreur lorsqu’elle est définie sur `ignore` (Babelfish version 1.2.0 et ultérieures).   |  strict  | 
| escape\$1hatch\$1index\$1clustering |  Détermine le comportement de Babelfish pour les mots-clés CLUSTERED ou NONCLUSTERED liés aux index et aux contraintes PRIMARY KEY ou UNIQUE. Lorsque CLUSTERED est ignoré, l’index ou la contrainte est créé comme si NONCLUSTERED avait été spécifié.  |  ignore  | 
| escape\$1hatch\$1index\$1columnstore |  Détermine le comportement de Babelfish pour la clause COLUMNSTORE. Si vous spécifiez `ignore`, Babelfish crée un index B-Tree classique.  |  strict  | 
| escape\$1hatch\$1join\$1hints |  Détermine le comportement des mots-clés dans un opérateur JOIN : LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE.  |  ignore  | 
| escape\$1hatch\$1language\$1non\$1english |  Détermine le comportement de Babelfish pour les langues autres que l’anglais dans les messages affichés à l’écran. Babelfish ne prend actuellement en charge que `us_english` pour les messages affichés à l’écran. SET LANGUAGE peut utiliser une variable contenant le nom de la langue, de sorte que la langue définie ne peut être détectée qu’au moment de l’exécution.  |  strict  | 
| escape\$1hatch\$1login\$1hashed\$1password |  En cas de définition sur ignore, l’erreur liée au mot-clé `HASHED` est supprimée pour `CREATE LOGIN` et `ALTER LOGIN`.  |  strict  | 
| escape\$1hatch\$1login\$1misc\$1options |  En cas de définition sur ignore, l’erreur liée à des mots-clés autres que `HASHED`, `MUST_CHANGE`, `OLD_PASSWORD` et `UNLOCK` est supprimée pour `CREATE LOGIN` et `ALTER LOGIN`.  |  strict  | 
| escape\$1hatch\$1login\$1old\$1password |  En cas de définition sur ignore, l’erreur liée au mot-clé `OLD_PASSWORD` est supprimée pour `CREATE LOGIN` et `ALTER LOGIN`.  |  strict  | 
| escape\$1hatch\$1login\$1password\$1must\$1change |  En cas de définition sur ignore, l’erreur liée au mot-clé `MUST_CHANGE` est supprimée pour `CREATE LOGIN` et `ALTER LOGIN`.  |  strict  | 
| escape\$1hatch\$1login\$1password\$1unlock |  En cas de définition sur ignore, l’erreur liée au mot-clé `UNLOCK` est supprimée pour `CREATE LOGIN` et `ALTER LOGIN`.  |  strict  | 
| escape\$1hatch\$1nocheck\$1add\$1constraint |  Détermine le comportement de Babelfish pour la clause WITH CHECK ou NOCHECK liée aux contraintes.  |  strict  | 
| escape\$1hatch\$1nocheck\$1existing\$1constraint |  Détermine le comportement de Babelfish pour les contraintes FOREIGN KEY ou CHECK.   |  strict  | 
| escape\$1hatch\$1query\$1hints |  Détermine le comportement de Babelfish pour les indicateurs de requête. Lorsque cette option est définie sur ignore, le serveur ignore les indicateurs qui utilisent la clause OPTION (...) pour spécifier les aspects de traitement des requêtes. Les exemples incluent SELECT FROM ... OPTION(MERGE JOIN HASH, MAXRECURSION 10)).  |  ignore  | 
|  escape\$1hatch\$1rowversion | Contrôle le comportement des types de données ROWVERSION et TIMESTAMP. Pour plus d’informations, consultez [Utilisation des fonctionnalités Babelfish dont la mise en œuvre est limitée](babelfish-compatibility.tsql.limited-implementation.md). | strict | 
| escape\$1hatch\$1schemabinding\$1function |  Détermine le comportement de Babelfish pour la clause WITH SCHEMABINDING. Par défaut, la clause WITH SCHEMABINDING est ignorée lorsqu’elle est spécifiée avec la commande CREATE ou ALTER FUNCTION.   |  ignore  | 
| escape\$1hatch\$1schemabinding\$1procedure |  Détermine le comportement de Babelfish pour la clause WITH SCHEMABINDING. Par défaut, la clause WITH SCHEMABINDING est ignorée lorsqu’elle est spécifiée avec la commande CREATE ou ALTER PROCEDURE.   |  ignore  | 
| escape\$1hatch\$1rowguidcol\$1column |  Détermine le comportement de Babelfish pour la clause ROWGUIDCOL lors de la création ou de la modification d’une table.  |  strict  | 
| escape\$1hatch\$1schemabinding\$1trigger |  Détermine le comportement de Babelfish pour la clause WITH SCHEMABINDING. Par défaut, la clause WITH SCHEMABINDING est ignorée lorsqu’elle est spécifiée avec la commande CREATE ou ALTER TRIGGER.  |  ignore  | 
| escape\$1hatch\$1schemabinding\$1view |  Détermine le comportement de Babelfish pour la clause WITH SCHEMABINDING. Par défaut, la clause WITH SCHEMABINDING est ignorée lorsqu’elle est spécifiée avec la commande CREATE ou ALTER VIEW.  |  ignore  | 
| escape\$1hatch\$1session\$1settings |  Détermine le comportement de Babelfish à l’égard des instructions SET non prises en charge au niveau de la session.  |  ignore  | 
| escape\$1hatch\$1showplan\$1all |  Contrôle le comportement de Babelfish lié à SET SHOWPLAN\$1ALL et SET STATISTICS PROFILE. Lorsqu’ils sont définis sur ignore (ignorer), ils se comportent comme SET BABELFISH\$1SHOWPLAN\$1ALL et SET BABELFISH\$1STATISTICS PROFILE ; lorsqu’ils sont définis sur strict, ils sont ignorés en silence.  |  strict  | 
| escape\$1hatch\$1storage\$1on\$1partition |  Détermine le comportement de Babelfish pour la clause `ON partition_scheme column ` lors de la définition du partitionnement. Babelfish n’implémente actuellement pas le partitionnement.  |  strict  | 
| escape\$1hatch\$1storage\$1options |  Trappe de secours associée à une option de stockage utilisée dans CREATE, ALTER DATABASE, TABLE, INDEX. Cela inclut les clauses (LOG) ON, TEXTIMAGE\$1ON, FILESTREAM\$1ON qui définissent les emplacements de stockage (partitions, groupes de fichiers) des tables, index et contraintes, ainsi que d’une base de données. Ce paramètre de trappe de secours s’applique à toutes ces clauses (y compris ON [PRIMARY] et ON "DEFAULT"). Une exception s’applique lorsqu’une partition est spécifiée pour une table ou un index accompagné de ON partition\$1scheme (column).  |  ignore  | 
| escape\$1hatch\$1table\$1hints |  Détermine le comportement des indicateurs de table spécifiés à l’aide de la clause WITH (...).   |  ignore  | 
| escape\$1hatch\$1unique\$1constraint |  Lorsqu’elle est définie comme stricte, une obscure différence sémantique entre SQL Server et PostgreSQL dans le traitement des valeurs NULL sur les colonnes indexées peut entraîner des erreurs. La différence sémantique n’apparaît que dans des cas d’utilisation irréalistes. Vous pouvez donc définir cette trappe de secours sur « ignorer » pour ne pas afficher l’erreur.  Obsolète à partir des versions suivantes 3.6.0 et ultérieures et des versions 4.2.0 et ultérieures  |  strict  | 