# Open SQL

Open SQL ist ein proprietäres SQL-Derivat, das vom Unternehmen SAP stammt. SAP beabsichtigt damit, einen einheitlichen SQL-Dialekt für alle von SAP unterstützten Datenbanken anzubieten. Open SQL ist Bestandteil der Programmiersprache ABAP. Es gibt aber auch eine (weniger bedeutsame) Version für Java. Die Benutzung von Open SQL setzt einen SAP ABAP oder Java Application Server voraus. Außerdem müssen alle verwendeten Datenbanktabellen im SAP-eigenen Dictionary erstellt werden. Ziel von Open SQL ist es, dass die verwendeten SQL-Befehle auf allen Datenbanken das gleiche Ergebnis liefern. Zu diesem Zweck enthält der jeweilige Application Server einen eigenen SQL-Parser und einen Umsetzer, der das Open-SQL-Kommando in den jeweiligen nativen Datenbankdialekt umwandelt.

## Funktionalität und Umfang

In neueren Versionen enthält Open SQL für ABAP große Teile des SQL-92-Standards mit vielen Erweiterungen. So werden beispielsweise Arithmetische Ausdrücke, CASE ... ENDCASE, einige SQL-Funktionen und Common Table Expressions unterstützt. Durch Emulation innerhalb des Application Servers können auch Funktionen angeboten werden, die nicht alle von SAP unterstützten Datenbanken unterstützen. Ein Beispiel sind hier z. B. Streams und Lokatoren, mit denen große LOB-Felder auf der Datenbank abschnittsweise gelesen und geschrieben werden können.
Der Umfang von Open SQL für Java ist deutlich geringer.

## Besonderheiten

* Lückenlose Integration in das SAP(ABAP)-Typsystem, unabhängig vom Typsystem der Datenbank.
* Statischer Syntaxcheck zur Compilezeit (etwa im Gegensatz zu anderen Datenbankschnittstellen, wie JDBC).
* Dynamisches und halbdynamisches SQL (Teile des SQL Statements können dynamisch zur Laufzeit übergeben werden. Die statischen Anteile können trotzdem zur Compilezeit überprüft werden).
* SAP eigene Erweiterungen, z. B. FOR ALL ENTRIES (Join von Datenbanktabellen mit sogenannten internen Tabellen, d. h. Variablen).
* Tabellen können im Application Server gepuffert und dann mittels Open SQL ohne Datenbankzugriff gelesen werden. Zu diesem Zweck enthält der Application Server eine (in memory) Datenbankengine (mit stark reduziertem Umfang).

## Unterstützte Datenbanken

In aktuellen SAP-Releases werden SAP HANA, Oracle, MaxDB, DB2, Microsoft SQL Server und Sybase ASE unterstützt. Historisch wurde auch Informix unterstützt.

## Native SQL

Mit Native SQL bezeichnet SAP die SQL-Dialekte der zugrunde liegenden Datenbanken. Ein Beispiel wäre das SQL der Oracle-Datenbank, welches ebenso wie DB2 oder MaxDB einen anderen Sprachumfang als Open SQL besitzt. Die ABAP-Laufzeitumgebung setzt dann die Open-SQL-Kommandos in die entsprechenden Native-SQL-Kommandos um. Mittels ADBC bzw. JDBC oder AMDP (Informatik) (nur ABAP) können in ABAP resp. Java auch direkt Native-SQL-Kommandos abgesetzt werden.

## Schlüsselwörter

Der Sprachvorrat von Open SQL besteht aus einer Untermenge der Schlüsselwörter des Standard-SQL, der mit einigen SAP-spezifischen Elementen angereichert wurde. Folgende Schlüsselwörter sind in Open SQL verwendbar:
* SELECT, ENDSELECT
* INSERT
* MODIFY
* UPDATE
* DELETE
* OPEN CURSOR, CLOSE CURSOR
* FETCH
* WITH (seit ABAP Kernel 749)
Open SQL enthält keine Kommandos der Data Definition Language. Mit Open-SQL-Methoden können keine Tabellen oder Views angelegt oder verändert werden. Dies ist nur über das ABAP bzw. Java Dictionary möglich.

## Systemvariablen

Zwei Systemvariablen, die zur Rückgabe von Werten verwendet werden, werden von den Open-SQL-Kommandos unterstützt und gehören zum Sprachvorrat von Open SQL:

### SY-SUBRC

    Rückgabewert des zuletzt aufgerufenen Kommandos.

### SY-DBCNT

    Anzahl der Datensätze, die vom zuletzt aufgerufenen SQL-Kommando verarbeitet wurden.