Ansicht
Dokumentation

ABAPUPDATE_SOURCE - UPDATE SOURCE

ABAPUPDATE_SOURCE - UPDATE SOURCE

General Material Data   SUBST_MERGE_LIST - merge external lists to one complete list with #if... logic for R3up  
Diese Dokumentation steht unter dem Copyright der SAP AG.
SAP E-Book

UPDATE dbtab, source

Kurzreferenz



... ${ ${SET set_expression1, set_expression2, ... $[WHERE sql_cond$] $[db_hints$]$}
    $| ${FROM ${@wa$|@( expr )$}$|${TABLE @itab$|@( expr )$}$}
            $[INDICATORS $[NOT$] SET STRUCTURE set_ind$] $} ...


Alternativen:

1. ... SET set_expression1, set_expression2, ... $[WHERE sql_cond$] $[db_hints$]

2. ... FROM @wa$|@( expr ) $[INDICATORS $[NOT$] SET STRUCTURE set_ind$]

3. ... FROM TABLE @itab$|@( expr ) $[INDICATORS $[NOT$] SET STRUCTURE set_ind$]

Wirkung

Die Angaben in source legen fest, welche Zeilen und Spalten geändert werden. Es können entweder einzelne Spalten mit dem Zusatz SET geändert oder ganze Zeilen mit dem Zusatz FROM überschrieben werden.

Hinter FROM kann entweder ein nicht-tabellenartiges Datenobjekt oder hinter TABLE eine interne Tabelle als Hostvariable oder Hostausdruck angegeben werden. Der Inhalt dieser Datenobjekte bestimmt zum einen, welche Zeile(n) geändert werden, und zum anderen, mit welchen Werten die Zeile(n) überschrieben werden.

Hinter FROM können Set-Indikatoren verwendet werden, um einzelne Felder innerhalb einer Zeile zu ändern (anstatt den ganzen Inhalt einer Zeile zu überschreiben).

Hinweis

Die Angabe von Hostvariablen ohne Fluchtsymbol @ ist obsolet. In den strikten Modi der Syntaxprüfung ab Release muss das Fluchtsymbol @ angegeben werden.

Alternative 1

... SET set_expression1, set_expression2, ... $[WHERE sql_cond$] $[db_hints$]


Zusätze:

1. ... WHERE sql_cond

2. ... db_hints

Wirkung

Hinter dem Zusatz SET werden die Änderungen in einer kommaseparierten Liste von Änderungsausdrücken set_expression1, set_expression2, ... angegeben.

Der Inhalt von Primärschlüsselfeldern kann nur geändert werden, falls die betroffene DDIC-Datenbanktabelle nicht mit einer Suchhilfe verknüpft ist. Falls durch die Änderungen eine Zeile entstehen würde, die zu doppelten Einträgen im Primärschlüssel oder einem eindeutigen Sekundärindex der DDIC-Datenbanktabelle führt, wird keine Zeile geändert und sy-subrc auf 4 gesetzt.

Falls der Wert einer Spalte vom Typ LRAW oder LCHR geändert wird, muss auch das zugehörige INT2- der INT4-Feld mit einem Wert versorgt werden.

Hinweise

  • Bei Verwendung einer kommaseparierten Liste wird die Syntaxprüfung in einem strikten Modus ausgeführt, welche die Anweisung strenger behandelt als die normale Syntaxprüfung.
  • Statt durch Kommata können die Änderungsausdrücke in einer obsoleten Form auch noch durch Leerzeichen separiert werden. In den strikten Modi der Syntaxprüfung ab Release müssen aber Kommata verwendet werden.

UPDATE, Verwendung von SET

Zusatz 1

... WHERE sql_cond

Wirkung

Der Zusatz WHERE bestimmt, in welchen Zeilen der DDIC-Datenbanktabelle die Änderungen durchgeführt werden. Es werden die Zeilen geändert, für die der logische Ausdruck sql_cond wahr ist. Für die relationalen Ausdrücke des logischen Ausdrucks sql_cond gilt die Einschränkung, dass keine Subqueries auf die zu verändernde DDIC-Datenbanktabelle ausgewertet werden können. Falls keine WHERE-Bedingung angegeben ist, werden standardmäßig alle Zeilen des Ziels der Anweisung geändert. Bei einem mandantenabhängigen Ziel sind dies die Zeilen des aktuellen Mandanten. Die implizite Mandantenbehandlung kann mit dem Zusatz USING gesteuert werden. Die Mandantenspalte eines mandantenabhängigen Ziels kann in der WHERE-Bedingung nicht angegeben werden.

Hinweise

  • Wenn auf Datenquellen mit generischer Tabellenpufferung zugegriffen wird, muss der gepufferte Bereich vollständig in der WHERE-Bedingung spezifiziert sein, ansonsten wird die Pufferung umgangen.
  • Wenn auf Datenquellen mit Einzelsatzpufferung zugegriffen wird, müssen in der WHERE-Bedingung mit AND verknüpfte Gleichheitsbedingungen für alle Schlüsselfelder des Primärschlüssels aufgeführt sein, ansonsten wird die Pufferung umgangen.

Beispiel

Setzen mehrerer Spalten einer Zeile, die über eine WHERE-Bedingung bestimmt wird.

Zusatz 2

... db_hints

Wirkung

In dieser Variante können mit db_hints Datenbankhinweise angegeben werden.

Alternative 2

... FROM @wa$|@( expr ) $[INDICATORS $[NOT$] SET STRUCTURE set_ind$]


Wirkung

Bei Angabe eines nicht-tabellenartigen Arbeitsbereichs als Hostvariable @wa oder Hostausdruck @( expr ), wird in der DDIC-Datenbanktabelle eine Zeile durchsucht, die im Primärschlüssel den gleichen Inhalt wie das entsprechende Anfangsstück des Arbeitsbereichs hat. Der Arbeitsbereich muss die Voraussetzungen für die Verwendung in -Anweisungen erfüllen.

  • Bei der Angabe eines Arbeitsbereichs, der keine Referenzvariablen für LOB-Handles enthält, wird der Inhalt des Arbeitsbereichs unkonvertiert und gemäß der Struktur der DDIC-Datenbanktabelle bzw. View interpretiert. Der Inhalt des Arbeitsbereichs wird der gefundenen Zeile zugewiesen. Die Zuweisung erfolgt ohne Konvertierung von links nach rechts gemäß der Struktur der DDIC-Datenbanktabelle bzw. View .
  • Bei der Angabe einer LOB-Handle-Struktur muss diese gemäß den Voraussetzungen genau wie die Struktur der DDIC-Datenbanktabelle aufgebaut sein. Die Komponenten des Arbeitsbereichs, die keine LOB-Handle-Komponenten sind, werden direkt den entsprechenden Spalten der gefundenen Zeile zugewiesen. Wenn es sich um eine LOB-Handle-Komponente vom Typ eines Schreibstroms handelt, wird dieser erzeugt. Wenn es sich um einen Typ für einen Lokator handelt, muss dieser vorhanden sein und wird als Quelle verwendet. Für Details, siehe LOB-Handles.
  • Bei der Angabe von Set-Indikatoren über den Zusatz INDICATORS und wenn der Arbeitsbereich keine Referenzvariablen für LOB-Handles enthält, muss er mit der Struktur der DDIC-Datenbanktabelle kompatibel sein. Bei einer LOB-Handle-Struktur können die LOB-Handle-Komponenten auf die Datentypen STRING oder RAWSTRING abgebildet werden und werden wie oben beschrieben behandelt.

Falls es in der Datenbank keine Zeile mit dem gleichen Inhalt des Primärschlüssels gibt oder die Änderung zu einem doppelten Eintrag in einem eindeutigen Sekundärindex führen würde, wird die Zeile nicht geändert und sy-subrc auf 4 gesetzt.

Auf Views, bei denen alle Felder Schlüsselfelder sind, sollte nicht schreibend mit UPDATE FROM zugegriffen werden. Für DDIC-Datenbank-Views führt dies zu einer Warnung von der Syntaxprüfung, für Projektions-Views zu einem Syntax- oder Laufzeitfehler.

Hinweise

  • Der Arbeitsbereich wa sollte immer mit Bezug auf die DDIC-Datenbanktabelle bzw. den DDIC-View im ABAP Dictionary deklariert werden. Für die Ableitung von LOB-Handle-Strukturen gibt es spezielle Zusätze zu den Anweisungen TYPES und $[CLASS-$]DATA.
  • Auch bei kompatiblen Arbeitsbereichen kann es zu Ausnahmen wegen ungültiger Werte kommen. Beispielsweise können Komponenten der Typen d und t ungültige Datums- und Zeitangaben enthalten, die nicht von Spalten der Typen DATN und TIMN akzeptiert werden.
  • Wenn die DDIC-Datenbanktabelle oder DDIC-View statisch angegeben wird, kann außerhalb von Klassen eine Kurzform angegeben werden. Der mit FROM wa angegebene Arbeitsbereich kann daher weggelassen werden. Voraussetzung dafür ist die Deklaration eines Tabellenarbeitsbereichs dbtab mit der Anweisung TABLES für die entsprechende DDIC-Datenbanktabelle oder DDIC-View. Das System ergänzt die UPDATE-Anweisung dann implizit um den Zusatz FROM dbtab.

Beispiel

Ändern des Rabatts des Kunden mit der Kundennummer '00017777' (im aktuellen Mandanten) auf 3 Prozent.

Beispiel

Gleiches Beispiel wie zuvor, aber mit Inline-Deklaration und Hostausdruck.

Alternative 3

... FROM TABLE @itab$|@( expr ) $[INDICATORS $[NOT$] SET STRUCTURE set_ind$]


Wirkung

Bei der Angabe einer internen Tabelle als Hostvariable @itab oder Hostausdruck @( expr ) bearbeitet das System alle Zeilen der internen Tabelle gemäß den Regeln für den Arbeitsbereich wa, mit der Ausnahme, dass bei Angabe einer internen Tabelle zwar Lokatoren als Quelle dienen aber keine Schreibströme erzeugt werden können.

Der Zeilentyp der internen Tabelle muss die Voraussetzungen für die Verwendung in -Anweisungen erfüllen.

Falls es in der internen Tabelle der Datenbank keine Zeile mit dem gleichen Inhalt des Primärschlüssels gibt oder die Änderung zu einem doppelten Eintrag in einem eindeutigen Sekundärindex führen würde, wird die Zeile nicht geändert und sy-subrc auf 4 gesetzt. Danach wird die Verarbeitung mit der nächsten Zeile fortgesetzt.

Ist die interne Tabelle leer, werden keine Zeilen geändert, sy-subrc wird aber dennoch auf 0 gesetzt. Das Systemfeld sy-dbcnt wird immer auf die Anzahl der tatsächlich eingefügten Zeilen gesetzt.

Hinweise

  • Bei Verwendung einer internen Tabelle führt die paketweise Verarbeitung dazu, dass ein zur UPDATE-Verarbeitung paralleler Lesezugriff auf die gleichen Zeilen teilweise schon den neuen und teilweise noch den alten Zustand sieht.
  • Die Anweisung UPDATE FROM TABLE ändert alle Zeilen, für welche dies möglich ist. Wenn sy-subrc nach Ausführung der Anweisung den Wert 4 enthält, bedeutet dies nicht, dass keine Zeilen geändert wurden sondern nur dass nicht alle Zeilen der internen Tabelle berücksichtigt werden konnten.

Beispiel

Verringerung des Flugpreises aller heutigen Flüge einer Fluggesellschaft in der DDIC-Datenbanktabelle SFLIGHT um den Prozentsatz percent. Die Berechnung des neuen Preises wird in einer inline deklarierten internen Tabelle sflight_tab vorgenommen und die DDIC-Datenbanktabelle wird mit dieser internen Tabelle als Quelle geändert.

Beispiel

Gleiches Beispiel wie zuvor, aber mit Berechnung des neuen Preises in einem Hostausdruck für die interne Tabelle. s






ABAP Short Reference   PERFORM Short Reference  
Diese Dokumentation steht unter dem Copyright der SAP AG.

Length: 17378 Date: 20240605 Time: 204151     sap01-206 ( 231 ms )