Règles pour les conversions
Les règles de cette section s’appliquent aux conversions impliquant des littéraux numériques. Aux fins de ces règles, les termes suivants sont définis :
Affectation du magasin : Lors de l’envoi de données dans une colonne de table dans une base de données. Cela se produit lors des appels à SQLExecute, SQLExecDirect et SQLSetPos. Pendant l’affectation du magasin, « target » fait référence à une colonne de base de données et « source » fait référence aux données dans les mémoires tampons d’application.
Affectation de récupération : Lors de la récupération de données de la base de données dans des mémoires tampons d’application. Cela se produit lors des appels à SQLFetch, SQLGetData, SQLFetchScroll et SQLSetPos. Pendant l’attribution de récupération, « target » fait référence aux mémoires tampons d’application et « source » fait référence à la colonne de base de données.
CS: Valeur dans la source de caractères.
NT: Valeur dans la cible numérique.
NS: Valeur dans la source numérique.
CT: Valeur dans la cible de caractères.
Précision d’un littéral numérique exact : nombre de chiffres qu’il contient.
Échelle d’un littéral numérique exact : nombre de chiffres à droite de la période exprimée ou implicite.
Précision d’un littéral numérique approximatif : la précision de sa mantisse.
Source de caractères vers cible numérique
Voici les règles de conversion d’une source de caractères (CS) en cible numérique (NT) :
Remplacez CS par la valeur obtenue en supprimant les espaces de début ou de fin dans CS. Si CS n’est pas un numérique-littéral valide, SQLSTATE 22018 (Valeur de caractère non valide pour la spécification de cast) est retourné.
Remplacez CS par la valeur obtenue en supprimant les zéros de début avant la virgule décimale, les zéros de fin après la virgule décimale, ou les deux.
Convertissez CS en NT. Si la conversion entraîne une perte de chiffres significatifs, SQLSTATE 22003 (valeur numérique hors plage) est retourné. Si la conversion entraîne la perte de chiffres non significatifs, SQLSTATE 01S07 (troncation fractionnée) est retourné.
Source numérique vers la cible de caractères
Voici les règles de conversion d’une source numérique (NS) en cible de caractères (CT) :
Laissez LT comme la longueur en caractères de CT. Pour l’affectation de récupération, LT est égal à la longueur de la mémoire tampon en caractères moins le nombre d’octets dans le caractère de fin null pour ce jeu de caractères.
Cas:
Si NS est un type numérique exact, laissez YP égaler la chaîne de caractères la plus courte conforme à la définition du littéral numérique exact , de sorte que l’échelle de YP soit identique à l’échelle de NS et que la valeur interprétée de YP soit la valeur absolue de NS.
Si NS est un type numérique approximatif, laissez YP comme une chaîne de caractères comme suit :
Casse :
Si NS est égal à 0, YP est 0.
Laissez YSN être la chaîne de caractères la plus courte qui est conforme à la définition de la valeur exacte-numérique-littérale et dont la valeur interprétée est la valeur absolue de NS. Si la longueur de YSN est inférieure à la (précision + 1) du type de données de NS, laissez YP égale YSN.
Sinon, YP est la chaîne de caractères la plus courte qui est conforme à la définition de approximatif-numérique-littéral dont la valeur interprétée est la valeur absolue de NS et dont la mantissa se compose d’un chiffre unique qui n’est pas « 0 », suivi d’un point et d’un entier non signé.
Casse :
Si NS est inférieur à 0, laissez Y être le résultat de :
'-' || YP
où « || » est l’opérateur de concaténation de chaîne.
Sinon, laissez Y égal à YP.
Que LY soit la longueur en caractères Y.
Casse :
Si LY est égal à LT, CT est défini sur Y.
Si LY est inférieur à LT, la valeur CT est définie sur Y étendue à droite par le nombre d’espaces approprié.
Sinon (LY > LT), copiez les premiers caractères LT de Y dans CT.
Casse :
S’il s’agit d’une attribution de magasin, retournez l’erreur SQLSTATE 22001 (Données de chaîne, tronquées à droite).
S’il s’agit d’une attribution de récupération, retourne l’avertissement SQLSTATE 01004 (Données de chaîne, tronquées à droite). Lorsque la copie entraîne la perte de chiffres fractionnaires (autres que les zéros de fin), le pilote définit si l’un des éléments suivants se produit :
(1) Le pilote tronque la chaîne en Y à une échelle appropriée (qui peut également être égale à zéro) et écrit le résultat en CT.
(2) Le pilote arrondit la chaîne en Y à une échelle appropriée (qui peut également être zéro) et écrit le résultat en CT.
(3) Le pilote ne tronque ni n’arrondit, mais copie simplement les premiers caractères LT de Y en CT.