Ansicht
Dokumentation

ABENSQL_ARITH - SQL ARITH

ABENSQL_ARITH - SQL ARITH

General Material Data   CL_GUI_FRONTEND_SERVICES - Frontend Services  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

- sql_arith

... $[-$] sql_exp1 +$|-$|*$|/ $[-$] sql_exp2 $[+$|-$|*$|/ $[-$] sql_exp3 ... $] ...

Wirkung

Arithmetischer Ausdruck in . Die Operatoren führen arithmetische Berechnungen zwischen jeweils zwei benachbarten Operanden sql_exp1, sql_exp2, ...aus. Die möglichen Operatoren sind:

  • + für Addition der Operanden
  • - für Subtraktion des rechten vom linken Operanden
  • * für Multiplikation der Operanden
  • / für Division des linken durch den rechten Operanden

Die Operatoren * und / haben höhere Priorität als die Operatoren + und -. Innerhalb einer Klammerebene werden die Operationen höherer Priorität vor den Operationen geringerer Priorität ausgeführt. Operationen gleicher Priorität werden von links nach rechts ausgeführt. Vor einem Operand, der nicht direkt auf einen Operator +, -, * oder / folgt, kann ein negatives Vorzeichen - gestellt werden.

Die arithmetischen Ausdrücke in unterscheiden sich je nach Datentyp der Operanden wie folgt:

  • Ganzzahlausdrücke
In Ganzzahlausdrücken gibt es unabhängig von der Klammerebene nur ganzzahlige Operanden. Dies sind solche vom Dictionary-Typ INT1, INT2, INT4 und INT8 bzw. vom ABAP-Typ b, s, i und int8 sowie gepackte Zahlen der Typen DEC, CURR und QUAN bzw. p ohne Nachkommastellen. In Ganzzahlausdrücken ist der Operator / nicht erlaubt. Es kommt zu einem Überlauf und einer Ausnahme der Klasse CX_SY_OPEN_SQL_DB, wenn
  • bei einer Operation zwischen zwei Integerzahlen, bei der keine Zahl vom Typ INT8 beteiligt ist, der Wertebereich des Typs INT4, bzw. i überschritten wird,

  • bei einer Operation zwischen zwei Integerzahlen, bei der eine Zahl vom Typ INT8 beteiligt ist, der Wertebereich des Typs INT8, bzw. int8 überschritten wird,

  • bei einer Operation, bei der eine gepackte Zahl beteiligt ist, der Wertebereich einer gepackten Zahl der Länge 31 ohne Nachkommastellen überschritten wird.

Das Ergebnis ist je nach den Typen der Operanden vom Typ INT4, INT8, oder bei Beteiligung gepackter Zahlen eine gepackte Zahl der Länge 31 ohne Nachkommastellen. Es kann nach der zugehörigen Zuweisungsregel allen numerischen ABAP-Typen außer dezimalen Gleitpunktzahlen zugewiesen werden, deren Wertebereich für das Ergebnis ausreichend ist.
  • Dezimalausdrücke
In Dezimalausdrücken gibt es neben eventuellen ganzzahligen Operanden (siehe oben) mindestens einen Operand vom DEC, CURR und QUAN bzw. p mit Nachkommastellen. In Dezimalausdrücken ist der Operator / nicht erlaubt. Das Ergebnis ist vom Typ DEC der Länge 31 mit maximal 14 Nachkommastellen. Es kann nach der zugehörigen Zuweisungsregel allen numerischen ABAP-Typen außer dezimalen Gleitpunktzahlen zugewiesen werden, deren Wertebereich für das Ergebnis ausreichend ist.
Wenn ein Dezimalausdruck statisch angegeben ist, stellt die Syntaxprüfung sicher, dass das Ergebnis jeder Operation im Wertebereich des Typs DEC der Länge 31 mit maximal 14 Nachkommastellen ist. Wenn Operanden angegeben sind, die zu anderen Werten führen könnten, kommt es zu einem Syntaxfehler. Bei der dynamischen Angabe kommt es in diesem Fall zu einer Ausnahme der Klasse CX_SY_DYNAMIC_OSQL_SEMANTICS.
  • Dezimale Gleitpunktausdrücke
In dezimalen Gleitpunktausdrücken gibt es neben eventuellen ganzzahligen Operanden und Operanden vom DEC, CURR und QUAN bzw. p mindestens einen Operand vom Typ DECFLOAT16 oder DECFLOAT34 bzw. vom ABAP-Typ decfloat16 oder decfloat34. In dezimalen Gleitpunktausdrücken ist eine Division mit dem Operator / zwischen zwei dezimalen Gleitpunktzahlen der Typen DECFLOAT16 oder DECFLOAT34 erlaubt. Das Ergebnis ist je nach den Typen der Operanden vom Typ DECFLOAT16 oder DECFLOAT34. Es kann nach der zugehörigen Zuweisungsregel den ABAP-Typen decfloat16 bzw. decfloat34 zugewiesen werden. Es kommt zu einem Überlauf und einer Ausnahme der Klasse CX_SY_OPEN_SQL_DB, wenn der Wertebereich des Ergebnistyps überschritten oder durch 0 dividiert wird.
  • Binäre Gleitpunktausdrücke
In binären Gleitpunktausdrücken gibt es ausschließlich Operanden vom Dictionary-Typ FLTP bzw. vom ABAP-Typ f. Nur in binären Gleitpunktausdrücken ist eine Division mit dem Operator / erlaubt. Es kommt zu einem Überlauf und einer Ausnahme der Klasse CX_SY_OPEN_SQL_DB, wenn der Wertebereich des Typs FLTP überschritten oder durch 0 dividiert wird. Das Ergebnis ist vom Typ FLTP und kann nach der zugehörigen Zuweisungsregel nur einem Feld vom ABAP-Datentyp f zugewiesen werden.

Andere Kombinationen von Operanden sind nicht erlaubt. Die Operanden können alle SQL-Ausdrücke der angegebenen Datentypen sein.

Wenn ein Operand eines arithmetischen Ausdrucks den Null-Wert hat, ist das Ergebnis des gesamten arithmetischen Ausdrucks der Null-Wert.

Hinweise

  • Die Angabe eines arithmetischen Ausdrucks bedeutet immer die Angabe eines SQL-Ausdrucks. Arithmetische Ausdrücke können nur an Operandenpositionen angegeben werden, an denen SQL-Ausdrücke möglich sind.
  • Die Aufteilung der arithmetischen Ausdrücke in Ganzzahlausdrücke, Dezimalausdrücke und die Gleitpunktausdrücke ist darin begründet, in allen unterstützten Datenbanksystemen das gleiche Verhalten zu erzielen.
  • Um Operatoren, die nicht vom Typ FLTP sind, in einem binären Gleitpunktausdruck zu verwenden, können sie mit einem CAST -Ausdruck in einen Operator vom Typ FLTP verwandelt werden.
  • Dezimale Gleitpunktzahlen werden in arithmetischen SQL-Ausdrücken nicht unterstützt und sind dort nicht als Datentypen der Operanden erlaubt.
  • Vor einem Operanden eines arithmetischen Ausdrucks kann kein positives Vorzeichen + aufgeführt werden. Wenn ein negatives Vorzeichen - hinter einem Operator +, -, * oder / aufgeführt werden soll, müssen Vorzeichen und Operand geklammert werden.
  • Wenn einem Operand ein negatives Vorzeichen - vorangestellt ist, wird die Syntaxprüfung in einem strikten Modus ausgeführt, welcher die Anweisung strenger behandelt als die normale Syntaxprüfung.

Beispiel

Arithmetischer Ausdruck als Argument der eingebauten Funktion DIVISION in einer SELECT-Liste. Um mit dem Operator / statt mit DIVISION zu arbeiten, müssten dessen Operanden nach DECFLOAT16, DECFLOAT34 oder FLTP gecasted werden und das Ergebnis wäre auch vom entsprechenden Typ.

SQL-Ausdrücke, arithmetische Berechnungen






ROGBILLS - Synchronize billing plans   Vendor Master (General Section)  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 9592 Date: 20240523 Time: 084035     sap01-206 ( 157 ms )