Compartir por


Reglas para conversiones

Las reglas de esta sección se aplican a las conversiones que implican literales numéricos. Para los fines de estas reglas, se definen los siguientes términos:

  • Asignación de la tienda: Al enviar datos a una columna de tabla de una base de datos. Esto ocurre durante las llamadas a SQLExecute, SQLExecDirect y SQLSetPos. Durante la asignación de almacén, "destino" hace referencia a una columna de base de datos y "origen" hace referencia a los datos de los búferes de aplicación.

  • Asignación de recuperación: Al recuperar datos de la base de datos en búferes de aplicación. Esto ocurre durante las llamadas a SQLFetch, SQLGetData, SQLFetchScroll y SQLSetPos. Durante la asignación de recuperación, "destino" hace referencia a los búferes de aplicación y "origen" hace referencia a la columna de base de datos.

  • CS: Valor del origen de caracteres.

  • NT: Valor del destino numérico.

  • NS: Valor del origen numérico.

  • CT: Valor del destino de caracteres.

  • Precisión de un literal numérico exacto: el número de dígitos que contiene.

  • Escala de un literal numérico exacto: el número de dígitos a la derecha del período expresado o implícito.

  • Precisión de un literal numérico aproximado: la precisión de su mantisa.

Origen de caracteres a destino numérico

A continuación se muestran las reglas para convertir de un origen de caracteres (CS) a un destino numérico (NT):

  1. Reemplace CS por el valor obtenido quitando los espacios iniciales o finales de CS. Si CS no es un literal numérico válido, se devuelve SQLSTATE 22018 (valor de carácter no válido para la especificación de conversión).

  2. Reemplace CS por el valor obtenido quitando ceros iniciales antes del separador decimal, ceros finales después del separador decimal o ambos.

  3. Convierta CS en NT. Si la conversión produce una pérdida de dígitos significativos, se devuelve SQLSTATE 22003 (valor numérico fuera del intervalo). Si la conversión da como resultado la pérdida de dígitos nosignificantes, se devuelve SQLSTATE 01S07 (truncamiento fraccionario).

Origen numérico a destino de caracteres

A continuación se muestran las reglas para convertir de un origen numérico (NS) a un destino de caracteres (CT):

  1. Deje que LT sea la longitud en caracteres de CT. Para la asignación de recuperación, LT es igual a la longitud del búfer en caracteres menos el número de bytes en el carácter de terminación NULL para este juego de caracteres.

  2. Casos:

    • Si NS es un tipo numérico exacto, deje que YP sea igual a la cadena de caracteres más corta que se ajusta a la definición de literal numérico exacto , de modo que la escala de YP sea la misma que la escala de NS y el valor interpretado de YP es el valor absoluto de NS.

    • Si NS es un tipo numérico aproximado, deje que YP sea una cadena de caracteres de la siguiente manera:

      Caso:

      Si NS es igual a 0, YP es 0.

      Deje que YSN sea la cadena de caracteres más corta que se ajusta a la definición de literal numérico exacto y cuyo valor interpretado es el valor absoluto de NS. Si la longitud de YSN es menor que la (precisión + 1) del tipo de datos de NS, deje que YP sea igual a YSN.

      De lo contrario, YP es la cadena de caracteres más corta que se ajusta a la definición de literal numérico aproximado cuyo valor interpretado es el valor absoluto de NS y cuya mantisa consta de un solo dígito que no es '0', seguido de un punto y un entero sin signo.

  3. Caso:

    • Si NS es menor que 0, deje que Y sea el resultado de:

      '-' || YP

      donde '||' es el operador de concatenación de cadenas.

      De lo contrario, deje que Y sea igual a YP.

  4. Deje que LY sea la longitud en caracteres de Y.

  5. Caso:

    • Si LY es igual a LT, CT se establece en Y.

    • Si LY es menor que LT, CT se establece en Y extendido a la derecha por el número adecuado de espacios.

      De lo contrario (LY > LT), copie los primeros caracteres LT de Y en CT.

      Caso:

      Si se trata de una asignación de almacén, devuelva el error SQLSTATE 22001 (datos de cadena, truncado con el botón derecho).

      Si se trata de una asignación de recuperación, devuelva la advertencia SQLSTATE 01004 (datos de cadena, truncados a la derecha). Cuando la copia da como resultado la pérdida de dígitos fraccionarios (distintos de ceros finales), se define si se produce una de las siguientes acciones:

      (1) El controlador trunca la cadena en Y en una escala adecuada (que puede ser cero también) y escribe el resultado en CT.

      (2) El controlador redondea la cadena en Y a una escala adecuada (que puede ser cero también) y escribe el resultado en CT.

      (3) El controlador no trunca ni redondea, pero solo copia los primeros caracteres LT de Y en CT.