Partilhar via


Regras para conversões

As regras nesta seção se aplicam a conversões que envolvem literais numéricos. Para os fins dessas regras, os seguintes termos são definidos:

  • Atribuição de loja: Ao enviar dados para uma coluna de tabela em um banco de dados. Isso ocorre durante chamadas para SQLExecute, SQLExecDirect e SQLSetPos. Durante a atribuição do repositório, "target" refere-se a uma coluna de banco de dados e "source" refere-se a dados em buffers de aplicativo.

  • Atribuição de recuperação: Ao recuperar dados do banco de dados em buffers de aplicativo. Isso ocorre durante chamadas para SQLFetch, SQLGetData, SQLFetchScroll e SQLSetPos. Durante a atribuição de recuperação, "target" refere-se aos buffers de aplicativo e "source" refere-se à coluna de banco de dados.

  • CS: O valor na origem do caractere.

  • NT: O valor no destino numérico.

  • NS: O valor na origem numérica.

  • CT: O valor no destino do caractere.

  • Precisão de um literal numérico exato: o número de dígitos que ele contém.

  • A escala de um literal numérico exato: o número de dígitos à direita do período expresso ou implícito.

  • A precisão de um literal numérico aproximado: a precisão de sua mantissa.

Origem do caractere para destino numérico

A seguir estão as regras para converter de uma Origem de Caractere (CS) em um destino numérico (NT):

  1. Substitua CS pelo valor obtido removendo espaços à esquerda ou à direita em CS. Se CS não for um literal numérico válido, SQLSTATE 22018 (valor de caractere inválido para especificação de conversão) será retornado.

  2. Substitua CS pelo valor obtido removendo zeros à esquerda antes do ponto decimal, à direita de zeros após o ponto decimal ou ambos.

  3. Converter CS em NT. Se a conversão resultar em uma perda de dígitos significativos, SQLSTATE 22003 (valor numérico fora do intervalo) será retornado. Se a conversão resultar na perda de dígitos não insignificantes, SQLSTATE 01S07 (truncamento fracionário) será retornado.

Origem numérica para destino de caractere

A seguir estão as regras para converter de uma Origem Numérica (NS) em um destino de caractere (CT):

  1. Deixe LT ter o comprimento em caracteres de CT. Para a atribuição de recuperação, LT é igual ao comprimento do buffer em caracteres menos o número de bytes no caractere de terminação nula para esse conjunto de caracteres.

  2. Casos:

    • Se NS for um tipo numérico exato, permita que YP seja igual à cadeia de caracteres mais curta que está em conformidade com a definição de exact-numeric-literal de modo que a escala de YP seja igual à escala de NS e o valor interpretado de YP seja o valor absoluto de NS.

    • Se NS for um tipo numérico aproximado, permita que YP seja uma cadeia de caracteres da seguinte maneira:

      Capitalização:

      Se NS for igual a 0, YP será 0.

      Deixe o YSN ser a cadeia de caracteres mais curta que está em conformidade com a definição de exact-numeric-literal e cujo valor interpretado é o valor absoluto de NS. Se o comprimento do YSN for menor que o (precisão + 1) do tipo de dados do NS, deixe YP igual a YSN.

      Caso contrário, YP é a cadeia de caracteres mais curta que está em conformidade com a definição de approximate-numeric-literal cujo valor interpretado é o valor absoluto de NS e cuja mantissa consiste em um único dígito que não é '0', seguido por um ponto e um inteiro sem sinal.

  3. Capitalização:

    • Se ns for menor que 0, deixe Y ser o resultado de:

      '-' || YP

      em que '||' é o operador de concatenação de cadeia de caracteres.

      Caso contrário, deixe Y igual a YP.

  4. Deixe LY ser o comprimento em caracteres de Y.

  5. Capitalização:

    • Se LY for igual a LT, CT será definido como Y.

    • Se LY for menor que LT, CT será definido como Y estendido à direita pelo número apropriado de espaços.

      Caso contrário (LY > LT), copie os primeiros caracteres LT de Y em CT.

      Capitalização:

      Se essa for uma atribuição de repositório, retorne o erro SQLSTATE 22001 (Dados de cadeia de caracteres, truncados à direita).

      Se essa for a atribuição de recuperação, retorne o aviso SQLSTATE 01004 (dados de cadeia de caracteres, truncados à direita). Quando a cópia resulta na perda de dígitos fracionários (além de zeros à direita), é definido pelo driver se um dos seguintes ocorre:

      (1) O driver trunca a cadeia de caracteres em Y em uma escala apropriada (que também pode ser zero) e grava o resultado em CT.

      (2) O driver arredonda a cadeia de caracteres em Y para uma escala apropriada (que também pode ser zero) e grava o resultado em CT.

      (3) O driver não trunca nem arredonda, mas apenas copia os primeiros caracteres LT de Y para CT.