Condividi tramite


Regole per le conversioni

Le regole contenute in questa sezione si applicano alle conversioni che coinvolgono valori letterali numerici. Ai fini di queste regole, vengono definiti i termini seguenti:

  • Assegnazione archivio: quando si inviano dati in una colonna di tabella in un database. Ciò si verifica durante le chiamate a SQLExecute, SQLExecDirect e SQLSetPos. Durante l'assegnazione dell'archivio, "target" fa riferimento a una colonna di database e a "origine" si riferisce ai dati nei buffer dell'applicazione.

  • Assegnazione di recupero: quando si recuperano dati dal database nei buffer dell'applicazione. Ciò si verifica durante le chiamate a SQLFetch, SQLGetData, SQLFetchScroll e SQLSetPos. Durante l'assegnazione di recupero, "target" fa riferimento ai buffer dell'applicazione e "source" fa riferimento alla colonna del database.

  • CS: valore nell'origine dei caratteri.

  • NT: valore nella destinazione numerica.

  • NS: valore nell'origine numerica.

  • CT: valore nella destinazione del carattere.

  • Precisione di un valore letterale numerico esatto: il numero di cifre che contiene.

  • Scala di un valore letterale numerico esatto: numero di cifre a destra del periodo espresso o implicito.

  • Precisione di un valore letterale numerico approssimativo: la precisione della sua mantissa.

Origine carattere in destinazione numerica

Di seguito sono riportate le regole per la conversione da un'origine carattere (CS) a una destinazione numerica (NT):

  1. Sostituire CS con il valore ottenuto rimuovendo tutti gli spazi iniziali o finali in CS. Se CS non è un valore letterale numerico valido, viene restituito SQLSTATE 22018 (valore di carattere non valido per la specifica del cast).

  2. Sostituire CS con il valore ottenuto rimuovendo gli zeri iniziali prima del separatore decimale, gli zeri finali dopo il separatore decimale o entrambi.

  3. Convertire CS in NT. Se la conversione comporta una perdita di cifre significative, viene restituito SQLSTATE 22003 (valore numerico non compreso nell'intervallo). Se la conversione comporta la perdita di cifre non firmanti, viene restituito SQLSTATE 01S07 (troncamento frazionario).

Destinazione da origine numerica a carattere

Di seguito sono riportate le regole per la conversione da un'origine numerica (NS) a una destinazione di caratteri (CT):

  1. Lasciare che LT sia la lunghezza in caratteri di CT. Per l'assegnazione di recupero, LT è uguale alla lunghezza del buffer in caratteri meno il numero di byte nel carattere di terminazione Null per questo set di caratteri.

  2. Casi:

    • Se NS è un tipo numerico esatto, lasciare che YP sia uguale alla stringa di caratteri più breve conforme alla definizione di valore letterale numerico esatto, in modo che la scala di YP sia uguale alla scala di NS e il valore interpretato di YP sia il valore assoluto di NS.

    • Se NS è un tipo numerico approssimativo, lasciare che YP sia una stringa di caratteri come indicato di seguito:

      Maiuscole/minuscole:

      Se NS è uguale a 0, YP è 0.

      Lasciare che YSN sia la stringa di caratteri più breve conforme alla definizione di valore letterale numerico esatto e il cui valore interpretato è il valore assoluto di NS. Se la lunghezza di YSN è minore di (precisione + 1) del tipo di dati NS, lasciare che YP sia uguale a YSN.

      In caso contrario, YP è la stringa di caratteri più breve conforme alla definizione di valore letterale numerico approssimativo il cui valore interpretato è il valore assoluto di NS e la cui mantissa è costituita da una singola cifra che non è '0', seguita da un punto e da un intero senza segno.

  3. Maiuscole/minuscole:

    • Se NS è minore di 0, lasciare che Y sia il risultato di:

      '-' || YP

      dove '||' è l'operatore di concatenazione di stringhe.

      In caso contrario, lasciare Y uguale a YP.

  4. Lasciare che LY sia la lunghezza in caratteri di Y.

  5. Maiuscole/minuscole:

    • Se LY è uguale a LT, CT viene impostato su Y.

    • Se LY è minore di LT, CT viene impostato su Y esteso a destra in base al numero appropriato di spazi.

      In caso contrario (LY > LT), copiare i primi caratteri LT di Y in CT.

      Maiuscole/minuscole:

      Se si tratta di un'assegnazione di archivio, restituire l'errore SQLSTATE 22001 (dati stringa, troncati a destra).

      Se si tratta di un'assegnazione di recupero, restituire l'avviso SQLSTATE 01004 (dati stringa, troncati a destra). Quando la copia comporta la perdita di cifre frazionarie (diverse dagli zeri finali), viene definito dal driver se si verifica una delle seguenti operazioni:

      (1) Il driver tronca la stringa in Y a una scala appropriata (che può anche essere zero) e scrive il risultato in CT.

      (2) Il driver arrotonda la stringa in Y a una scala appropriata (che può anche essere zero) e scrive il risultato in CT.

      (3) Il driver non tronca né arrotonda, ma copia solo i primi caratteri LT di Y in CT.