

# Gerenciar o tratamento de erros do Babelfish com hatches de escape
<a name="babelfish-strict"></a>

O Babelfish imita o comportamento do SQL para fluxo de controle e estado de transações sempre que possível. Quando o Babelfish encontra um erro, ele retorna um código de erro semelhante ao código de erro do SQL Server. Se o Babelfish não conseguir mapear o erro para um código do SQL Server, ele retornará um código de erro fixo (`33557097`) e realizará ações específicas com base no tipo de erro, da seguinte forma:
+ Se for um erro de tempo de compilação, o Babelfish reverterá a transação.
+ No caso de erros de tempo de execução, o Babelfish encerrará o lote e reverterá a transação.
+ Para um erro de protocolo entre o cliente e o servidor, a transação não será revertida.

Se um código de erro não puder ser mapeado para um código equivalente, e o código de um erro semelhante estiver disponível, o código do erro será mapeado para esse código alternativo. Por exemplo, os comportamentos que causam os códigos `8143` e `8144` do SQL Server são ambos mapeados para `8143`.

Erros que não podem ser mapeados não respeitam uma construção `TRY... CATCH`.

Você pode usar `@@ERROR` para retornar um código de erro do SQL Server ou a função `@@PGERROR` para retornar um código de erro do PostgreSQL. Também pode utilizar a função `fn_mapped_system_error_list` para retornar uma lista de códigos de erro mapeados. Para obter informações sobre códigos de erro do PostgreSQL, consulte o [site do PostgreSQL](https://www.postgresql.org/docs/current/errcodes-appendix.html).

## Modificar as configurações do hatch de escape do Babelfish
<a name="babelfish-escape_hatches"></a>

Para lidar com instruções que podem falhar, o Babelfish define certas opções denominadas hatches de escape. Um *hatch de escape* é uma opção que especifica o comportamento do Babelfish quando ele se depara com um recurso ou uma sintaxe sem suporte.

Você pode utilizar o procedimento armazenado `sp_babelfish_configure` para controlar as configurações de um hatch de escape. Use o script para definir o hatch de escape como `ignore` ou `strict`. Se estiver definido como `strict`, o Babelfish retornará um erro que você precisará corrigir antes de continuar.

Para aplicar as alterações à sessão atual e no nível do cluster, inclua a palavra-chave `server`.

O uso é o seguinte:
+ Para listar todos os hatches de escape e seu status, além de informações de uso, execute `sp_babelfish_configure`.
+ Para listar os hatches de escape nomeados e seus valores, seja para a sessão atual ou em todo o cluster, execute o comando `sp_babelfish_configure '{{hatch_name}}'`, em que `{{hatch_name}}` é o identificador de um ou mais hatches de escape. {{hatch\_name}} pode utilizar curingas SQL, como "%".
+ Para definir um ou mais hatches de escape para o valor especificado, execute `sp_babelfish_configure ['{{hatch_name}}' [, 'strict'|'ignore' [, 'server']]`. Para tornar as configurações permanentes em todo o cluster, inclua a palavra-chave `server`, conforme mostrado a seguir:

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

  Para configurá-las apenas para a sessão atual, não use `server`.
+ Para redefinir todos os hatches de escape para seus valores padrão, execute `sp_babelfish_configure 'default'` (Babelfish 1.2.0 e posterior). 

A string que identifica o hatch (ou os hatches) pode conter curingas SQL. Por exemplo, o seguinte define todos os hatches de escape de sintaxe como `ignore` para o cluster do Aurora PostgreSQL.

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

Na tabela a seguir, você pode encontrar descrições e valores padrão para os hatches de escape predefinidos do Babelfish.


| Hatch de escape | Descrição | Padrão | 
| --- | --- | --- | 
| escape\_hatch\_checkpoint | Permite o uso da instrução CHECKPOINT no código processual, mas a instrução CHECKPOINT não está implementada no momento. | ignorar | 
| escape\_hatch\_constraint\_name\_for\_default | Controla o comportamento do Babelfish relacionado a nomes de restrições padrão. | ignorar | 
| escape\_hatch\_database\_misc\_options | Controla o comportamento do Babelfish relacionado às seguintes opções em CREATE DATABASE: CONTAINMENT, DB\_CHAINING, TRUSTWORTHY, PERSISTENT\_LOG\_BUFFER. | ignorar | 
| escape\_hatch\_for\_replication | Controla o comportamento do Babelfish relacionado à cláusula [NOT] FOR REPLICATION ao criar ou modificar uma tabela. | strict | 
| escape\_hatch\_fulltext | Controla o comportamento do Babelfish relacionado a recursos FULLTEXT, como DEFAULT\_FULLTEXT\_LANGUAGE in CREATE/ALTER DATABASE, CREATE FULLTEXT INDEX ou sp\_fulltext\_database. | ignorar | 
| escape\_hatch\_ignore\_dup\_key | Controla o comportamento do Babelfish relacionado a CREATE/ALTER TABLE e CREATE INDEX. Quando IGNORE\_DUP\_KEY=ON, é gerado um erro quando definido como `strict` (o padrão) ou o erro é ignorado quando definido como `ignore` (Babelfish versão 1.2.0 e posterior).  | strict | 
| escape\_hatch\_index\_clustering | Controla o comportamento do Babelfish relacionado às palavras-chave CLUSTERED ou NONCLUSTERED para índices e restrições PRIMARY KEY ou UNIQUE. Quando CLUSTERED é ignorado, o índice ou a restrição ainda é criado como se NONCLUSTERED tivesse sido especificada. | ignorar | 
| escape\_hatch\_index\_columnstore | Controla o comportamento do Babelfish relacionado à cláusula COLUMNSTORE. Se você especificar `ignore`, o Babelfish criará um índice normal de árvore B. | strict | 
| escape\_hatch\_join\_hints | Controla o comportamento de palavras-chave em um operador JOIN: LOOP, HASH, MERGE, REMOTE, REDUCE, REDISTRIBUTE, REPLICATE. | ignorar | 
| escape\_hatch\_language\_non\_english | Controla o comportamento do Babelfish relacionado a idiomas diferentes do inglês para mensagens na tela. No momento, o Babelfish oferece suporte apenas a `us_english` para mensagens na tela. SET LANGUAGE pode utilizar uma variável contendo o nome do idioma e, portanto, o idioma real que está sendo definido apenas pode ser detectado em tempo de execução. | strict | 
| escape\_hatch\_login\_hashed\_password | Quando ignorada, suprime o erro para a palavra-chave `HASHED` para `CREATE LOGIN` e `ALTER LOGIN`. | strict | 
| escape\_hatch\_login\_misc\_options | Quando ignorada, suprime o erro para outras palavras-chave além de `HASHED`, `MUST_CHANGE`, `OLD_PASSWORD` e `UNLOCK`para `CREATE LOGIN` e `ALTER LOGIN`. | strict | 
| escape\_hatch\_login\_old\_password | Quando ignorada, suprime o erro para a palavra-chave `OLD_PASSWORD` para `CREATE LOGIN` e `ALTER LOGIN`. | strict | 
| escape\_hatch\_login\_password\_must\_change | Quando ignorada, suprime o erro para a palavra-chave `MUST_CHANGE` para `CREATE LOGIN` e `ALTER LOGIN`. | strict | 
| escape\_hatch\_login\_password\_unlock | Quando ignorada, suprime o erro para a palavra-chave `UNLOCK` para `CREATE LOGIN` e `ALTER LOGIN`. | strict | 
| escape\_hatch\_nocheck\_add\_constraint | Controla o comportamento do Babelfish relacionado à cláusula WITH CHECK ou NOCHECK para restrições. | strict | 
| escape\_hatch\_nocheck\_existing\_constraint | Controla o comportamento do Babelfish relacionado a restrições FOREIGN KEY ou CHECK.  | strict | 
| escape\_hatch\_query\_hints | Controla o comportamento do Babelfish relacionado a dicas de consultas. Quando essa opção é definida como ignore, o servidor ignora as dicas que usam a cláusula OPTION (...) para especificar aspectos de processamento de consultas. Exemplos incluem SELECT FROM... OPTION(MERGE JOIN HASH, MAXRECURSION 10)). | ignorar | 
|  escape\_hatch\_rowversion | Controla o comportamento dos tipos de dados ROWVERSION e TIMESTAMP. Para ter mais informações, consulte [Usar recursos do Babelfish com implementação limitada](babelfish-compatibility.tsql.limited-implementation.md). | strict | 
| escape\_hatch\_schemabinding\_function | Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER FUNCTION.  | ignorar | 
| escape\_hatch\_schemabinding\_procedure | Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER PROCEDURE.  | ignorar | 
| escape\_hatch\_rowguidcol\_column | Controla o comportamento do Babelfish relacionado à cláusula ROWGUIDCOL ao criar ou modificar uma tabela. | strict | 
| escape\_hatch\_schemabinding\_trigger | Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER TRIGGER. | ignorar | 
| escape\_hatch\_schemabinding\_view | Controla o comportamento do Babelfish referente à cláusula WITH SCHEMABINDING. Por padrão, a cláusula WITH SCHEMABINDING é ignorada ao ser especificada com o comando CREATE ou ALTER VIEW. | ignorar | 
| escape\_hatch\_session\_settings | Controla o comportamento do Babelfish em relação a instruções SET em nível de sessão incompatíveis. | ignorar | 
| escape\_hatch\_showplan\_all | Controla o comportamento do Babelfish com relação a SET SHOWPLAN\_ALL e SET STATISTICS PROFILE. Quando definidos para serem ignorados, eles se comportam como SET BABELFISH\_SHOWPLAN\_ALL e SET BABELFISH\_STATISTICS PROFILE; quando definidos para serem estritos, são ignorados silenciosamente. | strict | 
| escape\_hatch\_storage\_on\_partition | Controla o comportamento do Babelfish relacionado à cláusula `ON partition_scheme column ` ao definir o particionamento. Atualmente, o Babelfish não implementa particionamento. | strict | 
| escape\_hatch\_storage\_options | Hatch de escape em qualquer opção de armazenamento utilizada em CREATE, ALTER DATABASE, TABLE, INDEX. Isso inclui cláusulas (LOG) ON, TEXTIMAGE\_ON e FILESTREAM\_ON que definem locais de armazenamento (partições e grupos de arquivos) para tabelas, índices e restrições e também para um banco de dados. Essa configuração de hatch de escape aplica-se a todas essas cláusulas (incluindo ON [PRIMARY] e ON “DEFAULT”). A exceção é quando uma partição é especificada para uma tabela ou um índice com ON partition\_scheme (coluna). | ignorar | 
| escape\_hatch\_table\_hints | Controla o comportamento de dicas de tabelas especificadas utilizando a cláusula WITH (...).  | ignorar | 
| escape\_hatch\_unique\_constraint | Quando definido como estrito, uma diferença semântica obscura entre o SQL Server e o PostgreSQL no tratamento de valores NULL em colunas indexadas pode gerar erros. A diferença semântica só surge em casos de uso não realistas, para que você possa definir esse hatch de escape como “ignorar” para evitar ver o erro. <br />Obsoleto nas seguintes versões: 3.6.0 e versões posteriores, 4.2.0 e versões posteriores. | strict | 