Der eingebaute Typ CHAR, der auf den ABAP-Typ c abgebildet wird, dient der
Beschreibung allgemeiner Textfelder mit einer maximalen Länge von 30000 Zeichen, aber nur 1333 Zeichen für Tabellenfelder.
Der eingebaute Typ LCHR, der ebenfalls auf den ABAP-Typ c abgebildet wird,
dient der Beschreibung allgemeiner Textfelder mit Längen zwischen 256 und 32000 Zeichen. In einer
Datenbanktabelle muss die maximale Länge als Wert eines vorangehenden INT2- oder INT4-Feldes
angegeben sein. Es kann nur ein Tabellenfeld des Typs LCHR oder LRAW geben. Es kann kein Schlüsselfeld
sein und es muss das letzte Tabellenfeld sein. Es kann nicht an allen Positionen von ABAP-SQL-Anweisungen verwendet werden.
Der eingebaute Typ SSTRING wird auf den ABAP-Typ string abgebildet, im ABAP
Dictionary und von Datenbanktabellen aber wie der Typ CHAR bzw. VARCHAR behandelt. Die Länge ist auf maximal 1333 begrenzt, aber Tabellenfelder dieses Typs können auch als
Schlüsselfelder von Datenbanktabellen und an fast allen Positionen von ABAP-SQL-Anweisungen verwendet werden, an denen Textfelder möglich sind.
Der eingebaute Typ STRING wird auf den ABAP-Typ string abgebildet und im ABAP Dictionary und von Datenbanktabellen auch wie ein Textstring
(CLOB) behandelt. Tabellenfelder dieses Typs können nicht als
Schlüsselfelder sowie nicht als
Indexfelder von Datenbanktabellen und
nicht an allen Positionen von ABAP-SQL-Anweisungen verwendet werden. Die mögliche Länge
eines Textstrings ist unbeschränkt, es kann aber eine maximale Länge ab 256 angegeben,
die bei der Verwendung für ein Tabellenfeld einer Datenbanktabelle dessen Länge tatsächlich einschränkt, was bei einem Zugriff mit ABAP SQL zu beachten ist (siehe unten).
Hinweise
In allgemeinen Strukturen gibt es keine Beschränkung der Länge einer Komponente vom Typ CHAR auf 1333.
In einer Datenbanktabelle kann es nur eine Tabellenfeld des Typs LCHR geben und es muss das letzte
sein. Dies schließt die gleichzeitige Verwendung des Typs LRAW in einer Datenbanktabelle aus.
Beim Auslesen eines LCHR-Feldes mit der Anweisung SELECT muss immer auch das vorangehende Längenfeld mit ausgelesen werden. Bei einem
ändernden Zugriffen mit ABAP SQL muss das Längenfeld mit dem korrekten Wert versorgt werden, ansonsten kann es zu einem Datenverlust kommen.
Für Neuentwicklungen wird die Verwendung von LCHR nicht mehr empfohlen. Statt dessen sollte der Typ STRING verwendet werden, der aber genauso wenig für
Schlüsselfelder von Datenbanktabellen
oder zur uneingeschränkten Verwendung in ABAP SQL in Frage kommt. Hierfür kann wenn möglich SSTRING verwendet werden.
Eine Umstellung vorhandener Dictionary-Objekte von LCHR nach STRING oder SSTRING kann dagegen kritisch sein, da alle ABAP-Typen und -Objekte, die sich auf ein solches Dictionary-Objekt beziehen danach einen
tiefen Datentyp haben. Ein Wechsel von einem
flachen auf einen
tiefen Datentyp ist in aller Regel eine inkompatible Änderung und kann in ABAP-Programmen zu Syntaxfehlern führen.
Byteketten
Für Byteketten stehen die folgenden eingebauten Datentypen des ABAP Dictionary zur Verfügung:
Der eingebaute Typ RAW, der auf den ABAP-Typ x abgebildet wird, dient der
Beschreibung von Bytefelder mit einer maximalen Länge von 32000 Zeichen, aber nur 255 Zeichen für Tabellenfelder.
Der eingebaute Typ LRAW, der ebenfalls auf den ABAP-Typ x abgebildet wird,
dient der Beschreibung von Bytefeldern mit Längen zwischen 256 und 32000 Zeichen. In einer Datenbanktabelle
muss die maximale Länge als Wert eines vorangehenden INT2- oder INT4-Feldes angegeben sein. Es
kann nur ein Tabellenfeld des TypsLRAW oder LCHR geben. Es kann kein Schlüsselfeld sein und es muss das letzte Tabellenfeld sein. Es kann nicht an allen Positionen von ABAP-SQL-Anweisungen verwendet werden.
Der eingebaute Typ RAWSTRING wird auf den ABAP-Typ xstring abgebildet und im ABAP Dictionary und von Datenbanktabellen auch wie ein Bytestring
(BLOB) behandelt. Tabellenfelder dieses Typs können nicht als
Schlüsselfelder sowie nicht als
Indexfelder von Datenbanktabellen und
nicht an allen Positionen von ABAP-SQL-Anweisungen verwendet werden. Die mögliche Länge
eines Bytestrings ist unbeschränkt, es kann aber eine maximale Länge ab 256 angegeben,
die bei der Verwendung für ein Tabellenfeld einer Datenbanktabelle dessen Länge tatsächlich einschränkt, was bei einem Zugriff mit ABAP SQL zu beachten ist (siehe unten).
Hinweise
In allgemeinen Strukturen gibt es keine Beschränkung der Länge einer Komponente vom Typ RAW auf 255.
In einer Datenbanktabelle kann es nur eine Tabellenfeld des Typs LRAW geben und es muss das letzte
sein. Dies schließt die gleichzeitige Verwendung des Typs LCHR in einer Datenbanktabelle aus.
Beim Auslesen eines LRAW-Feldes mit der Anweisung SELECT muss immer auch das vorangehende Längenfeld mit ausgelesen werden. Bei einem
ändernden Zugriffen mit ABAP SQL muss das Längenfeld mit dem korrekten Wert versorgt werden, ansonsten kann es zu einem Datenverlust kommen.
Für Neuentwicklungen wird die Verwendung von LRAW nicht mehr empfohlen. Statt dessen sollte der Typ RAWSTRING verwendet werden, der aber genauso wenig für
Schlüsselfelder von Datenbanktabellen oder zur uneingeschränkten Verwendung in ABAP SQL in Frage kommt.
Eine Umstellung vorhandener Dictionary-Objekte von LRAW nach RAWSTRING kann dagegen kritisch sein, da alle ABAP-Typen und -Objekte, die sich auf ein solches Dictionary-Objekt beziehen danach einen
tiefen Datentyp haben. Ein Wechsel von einem
flachen auf einen
tiefen Datentyp ist in aller Regel eine inkompatible Änderung und kann in ABAP-Programmen zu Syntaxfehlern führen.
Hinweise zu Strings
Bezüglich der eingebauten Datentypen für Text- oder Bytestrings sind folgenden Besonderheiten zu beachten:
Die Typen STRING und RAWSTRING für LOBs
haben eine variable Länge. Ihre maximale Länge kann angegeben werden, ist aber nach oben
unbeschränkt. Bei der Verwendung für ein Tabellenfeld einer Datenbanktabelle stellt die maximale Länge falls angegeben eine tatsächliche Begrenzung dar.
Der Typ SSTRING hat ebenfalls eine variable Länge, die aber durch die anzugebende maximale
Länge nach oben beschränkt ist. Die größte maximale Länge ist 1333.
Sein Vorteil gegenüber CHAR ist, dass er dem ABAP-Typ string zugeordnet
ist. Sein Vorteil gegenüber STRING ist, dass er auch für Schlüsselfelder von Datenbanktabellen
und uneingeschränkt an allen Stellen in ABAP SQL verwendet werden kann, an denen auch der Typ CHAR möglich ist.
Die maximale Länge, die bei den Typen STRING und RAWSTRING angegeben werden kann und bei SSTRING angegeben werden muss, darf bei einem
ändernden Zugriff auf ein Datenbankfeld dieser
Typen mit ABAP SQL nicht überschritten werden, sonst kommt es zu einer Ausnahme der Klasse
CX_SY_OPEN_SQL_DB. Ein Abschneiden eines Strings beim Lesen in ein Zielfeld wird dagegen ignoriert.
In ABAP-Programmen zu beachten, dass die im ABAP Dictionary für die Typen STRING, RAWSTRING
und SSTRING definierten maximalen Längen keine Auswirkung auf die zugeordneten ABAP-Typen
string und xstring haben. Dadurch kann es beim Schreiben eines zu
langen Strings in eine Datenbanktabelle zu einer Ausnahme kommen. Falls erforderlich muss im ABAP-Programm deshalb selbst für eine Längenbeschränkung der Strings gesorgt werden.
Die maximale Länge von Datentypen, die auf STRING, RAWSTRING und SSTRING beruhen, kann in
einem ABAP-Programm mit der eingebauten Funktion dbmaxlen festgestellt werden.
Schließende Leerzeichen werden in Tabellenfeldern vom Typ STRING aber nicht in Tabellenfeldern
vom Typ SSTRING gespeichert. Dies ist insbesondere zu beachten, wenn kurze Strings als Schlüsselfelder
von Datenbanktabellen verwendet werden, da schließende Leerzeichen dort kein Unterscheidungsmerkmal darstellen können.
LOBs der Typen STRING und RAWSTRING werden in der Regel auch auf der Datenbank als
tiefe Datenobjekte behandelt,
bei denen innerhalb des Datensatzes lediglich ein LOB-Lokator abgelegt wird, der auf die eigentlichen String-Daten verweist. Datenbankfelder des Typs SSTRING sind in der Regel
flach abgelegt. Ein leerer langer String kann auch durch den
Null-Wert abgelegt sein.
Die tatsächliche Behandlung hängt aber vom jeweiligen Datenbanksystem ab und ist für ABAP-Programme nicht von Belang.
Wenn in ABAP SQL ein Arbeitsbereich oder eine interne
Tabelle für den Zugriff auf Tabellenfelder der Typen SSTRING, STRING oder RAWSTRING verwendet wird, muss der Arbeitsbereich bzw. der Zeilentyp der internen Tabelle kompatibel zur Datenbankstruktur sein.
Wenn Strukturen, Datenbanktabellen oder Views, die Strings als Komponenten haben, für Typisierungen in ABAP verwendet werden, ist zu beachten, dass es sich um
tiefe Strukturen handelt.
Sie können z.B. nicht in der für Datenbankzugriffe obsoleten TABLES-Anweisung oder zur Typisierung der ebenfalls obsoleten
Tabellenparameter von Prozeduren verwendet werden.
Für lange Strings (LOBs) in Datenbanktabellen kann der Zugriff langsamer sein als auf andere
Datentypen. Wenn nicht alle Daten auf einmal benötigt werden und auch um eventuelle Speichergrenzen der AS-Instanz zu umgehen, kann über
Streaming und Lokatoren auf lange Strings zugegriffen werden.
Verwendung in ABAP SQL
Bezüglich dem Zugriff auf Datenbankfelder der zeichen- und byteartigen Typen in ABAP SQL gelten folgende Einschränkungen:
Auf Datenbankfelder der Datentypen CHAR und RAW kann in ABAP SQL uneingeschränkt zugegriffen werden.
Datenbankfelder der Datentypen STRING und RAWSTRING sowie LCHR und LRAW können an folgenden Operandenpositionen nicht verwendet werden:
Der Datentyp SSTRING kann uneingeschränkt verwendet werden, außer in der coalesce-Funktion und in CASE-Ausdrücken.
Hinweis
Für den obsoleten Datentyp VARC gelten die gleichen Einschränkungen wie für STRING und RAWSTRING sowie LCHR und LRAW.
Behandlung in Dynpros
Bei der Übernahme eines Felds mit zeichenartigem Dictionary-Typ von einem
Dynpro werden Kleinbuchstaben
standardmäßig in Großbuchstaben umgesetzt. Dieses Verhalten kann im Screen Painter übersteuert werden. Weiterhin kann in den semantischen Eigenschaften einer Domäne der Erhalt von
Kleinbuchstaben für Datenelemente festgelegt werden.