Regeln für Konvertierungen
Die Regeln in diesem Abschnitt gelten für Konvertierungen mit numerischen Literalen. Für die Zwecke dieser Regeln werden die folgenden Begriffe definiert:
Speicherzuweisung: Beim Senden von Daten in eine Tabellenspalte in einer Datenbank. Dies tritt bei Aufrufen von SQLExecute, SQLExecDirect und SQLSetPos auf. Während der Speicherzuweisung bezieht sich "target" auf eine Datenbankspalte und "quelle" auf Daten in Anwendungspuffern.
Abrufzuweisung: Beim Abrufen von Daten aus der Datenbank in Anwendungspuffer. Dies tritt bei Aufrufen von SQLFetch, SQLGetData, SQLFetchScroll und SQLSetPos auf. Während der Abrufzuweisung bezieht sich "ziel" auf die Anwendungspuffer und "source" auf die Datenbankspalte.
CS: Der Wert in der Zeichenquelle.
NT: Der Wert im numerischen Ziel.
NS: Der Wert in der numerischen Quelle.
CT: Der Wert im Zeichenziel.
Genauigkeit eines exakten numerischen Literals: die Anzahl der enthaltenen Ziffern.
Die Skala eines exakten numerischen Literals: die Anzahl der Ziffern rechts neben dem ausgedrückten oder implizierten Zeitraum.
Die Genauigkeit eines ungefähren numerischen Literals: die Genauigkeit seiner Mantisse.
Zeichenquelle zu numerischem Ziel
Im Folgenden sind die Regeln für die Konvertierung von einer Zeichenquelle (CS) in ein numerisches Ziel (NT) aufgeführt:
Ersetzen Sie CS durch den erhaltenen Wert, indem Sie alle führenden oder nachgestellten Leerzeichen in CS entfernen. Wenn CS kein gültiges numerisches Literal ist, wird SQLSTATE 22018 (Ungültiger Zeichenwert für die Castspezifikation) zurückgegeben.
Ersetzen Sie CS durch den Wert, den Sie erhalten haben, indem Sie führende Nullen vor dem Dezimalpunkt und nachfolgende Nullen nach dem Dezimalpunkt oder beides entfernen.
Konvertieren Sie CS in NT. Wenn die Konvertierung zu einem Verlust signifikanter Ziffern führt, wird SQLSTATE 22003 (Numerischer Wert außerhalb des Bereichs) zurückgegeben. Wenn die Konvertierung zum Verlust nicht bezehter Ziffern führt, wird SQLSTATE 01S07 (Bruchabkürzung) zurückgegeben.
Numerische Quelle zu Zeichenziel
Im Folgenden sind die Regeln für die Konvertierung von einer numerischen Quelle (NS) in ein Zeichenziel (Zeichenziel, CT) aufgeführt:
Lassen Sie LT die Länge in Zeichen von CT angeben. Bei der Abrufzuweisung entspricht LT der Länge des Puffers in Zeichen abzüglich der Anzahl von Bytes im NULL-Terminierungszeichen für diesen Zeichensatz.
Fällen:
Wenn NS ein exakter numerischer Typ ist, lassen Sie YP der kürzesten Zeichenfolge entsprechen, die der Definition von exakt-numerisch-literal entspricht, sodass die Skalierung von YP mit der Skalierung von NS identisch ist und der interpretierte Wert von YP der absolute Wert von NS ist.
Wenn NS ein ungefährer numerischer Typ ist, lassen Sie YP wie folgt eine Zeichenfolge sein:
Schreibweise:
Wenn NS gleich 0 ist, ist YP 0.
YSN ist die kürzeste Zeichenfolge, die der Definition von exakt-numerisch-literal entspricht und deren interpretierter Wert der absolute Wert von NS ist. Wenn die Länge von YSN kleiner als die (Genauigkeit + 1) des Datentyps von NS ist, lassen Sie YP gleich YSN.
Andernfalls ist YP die kürzeste Zeichenfolge, die der Definition von ungefähr-numerisch-literal entspricht, deren interpretierter Wert der absolute Wert von NS ist und deren Mantissa aus einer einzelnen Ziffer besteht, die nicht "0" ist, gefolgt von einem Punkt und einer ganzen Zahl ohne Vorzeichen.
Schreibweise:
Wenn NS kleiner als 0 ist, lassen Sie Y das Ergebnis von:
'-' || YP
wobei "|" der Zeichenfolgenverkettungsoperator ist.
Andernfalls lassen Sie Y gleich YP.
Lassen Sie LY die Länge in Zeichen von Y angeben.
Schreibweise:
Wenn LY gleich LT ist, wird CT auf Y festgelegt.
Wenn LY kleiner als LT ist, wird CT auf Y festgelegt, die auf der rechten Seite um die entsprechende Anzahl von Leerzeichen erweitert wird.
Kopieren Sie andernfalls (LY > LT) die ersten LT-Zeichen von Y in CT.
Schreibweise:
Wenn es sich um eine Speicherzuweisung handelt, geben Sie den Fehler SQLSTATE 22001 (Zeichenfolgendaten, rechts abgeschnitten) zurück.
Wenn dies eine Abrufzuweisung ist, geben Sie die Warnung SQLSTATE 01004 (Zeichenfolgendaten, rechts abgeschnitten) zurück. Wenn die Kopie zum Verlust von Bruchstellen führt (mit Ausnahme von nachfolgenden Nullen), wird vom Treiber definiert, ob eine der folgenden Ereignisse auftritt:
(1) Der Treiber schneidet die Zeichenfolge in Y auf eine geeignete Skalierung ab (die auch 0 sein kann) und schreibt das Ergebnis in ct.
(2) Der Treiber rundet die Zeichenfolge in Y auf eine geeignete Skala (die auch 0 sein kann) und schreibt das Ergebnis in ct.
(3) Der Treiber schneidet weder ab noch rundet ab, sondern kopiert einfach die ersten LT-Zeichen von Y in CT.