ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP - Database Accesses → Native SQL
EXEC SQL
Other versions: 7.31 | 7.40 | 7.54
Syntax
EXEC SQL.
...
ENDEXEC.
Effect
These statements define an area in an ABAP program in which one or more
Native SQL statements can
be specified. The area between EXEC and ENDEXEC
is not checked completely by the syntax check. The statements entered there are passed to the Native SQL interface and processed there as follows:
-
Almost all SQL statements that are valid for the addressed database system can be included between
EXECandENDEXEC, in particular the DDL statements. These SQL statements are passed from the Native SQL interface to the database system largely unchanged. The syntax rules are specified by the database system, in particular the case sensitivity rules for database objects. If the syntax allows a separator character between individual statements, you can include multiple Native-SQL statements betweenEXECandENDEXEC. Generally, the semicolon (;) is used as the separator character. -
You can also include SAP-specific Native-SQL language elements between
EXECandENDEXEC. These statements are not passed directly from the Native SQL interface to the database, but are converted appropriately. These SAP-specific language elements are:
All Native SQL statements bypass SAP buffering. Automatic client handling is not performed.
System fields
The statement ENDEXEC sets the system fields sy-subrc
and sy-dbcnt. When using the obsolete addition
PERFORMING, note that implicit cursor processing is carried out and the system fields are set for every read.
| sy-subrc | Meaning |
|---|---|
| 0 | The statements between EXEC and ENDEXEC were executed successfully. |
| 4 | The statements between EXEC and ENDEXEC werenot successful. After implicit cursor processing with PERFORMING, sy-subrc always contains the value 4. |
The ENDEXEC statement sets sy-dbcnt to the number
of table rows processed in the last Native SQL statement. After implicit cursor processing with
PERFORMING, sy-dbcnt contains the total number of rows read. If an
overflow occurs because the number or rows is greater than 2,147,483,647, sy-dbcnt is set to -1.
Notes
- Programs with Native SQL statements are generally dependent on the database system used, so that they cannot be executed in all AS ABAP systems. This is especially true for the examples in this section, which were written for Informix database systems, unless otherwise stated.
-
If insertions or modifications with Native SQL statements
INSERTor UPDATE would cause double rows with regard to the primary table key, no exception is raised. Instead,sy-subrcis set to 4. However, if another operation, such as executing a Stored Procedure, would cause a double row, an exception would be raised. - The client ID of a database table must be specified explicitly. Remember that application programs should only use the data in the current client. In megatenancy systems, this is checked by the ABAP runtime environment.
-
The obsolete addition
PERFORMING(not allowed in classes) executes implicit cursor processing and must no longer be used. The obsolete statementEXIT FROM SQLcan be used to exit this type of processing.
Example
See the executable example for Native SQL.
Exceptions
Catchable Exceptions
CX_SY_NATIVE_SQL_ERROR
-
Cause: Error when building up a secondary database connection.
Runtime Error:DBIF_DSQL2_CONNECTERR -
Cause: The specified secondary database connection is not registered in table DBCON.
Runtime Error:DBIF_DSQL2_CONNECTSTR_ERROR -
Cause: Environment variables with errors in table DBCON used for connection
to SAP or another external database (Multi-Connect). To build up a connection, the environment variables
are read from the table DBCON and analysed. The check resulted that the values are longer than allowed, or that environment variables are missing when building up a connection.
Runtime Error:DBIF_DSQL2_INVALENV_ERROR -
Cause: Illegal disruption of a database selection. The cursor was closed.
Runtime Error:DBIF_DSQL2_INVALID_CURSOR: -
Cause: There is already a dataset with the specified key.
Runtime Error:DBIF_DSQL2_KEY_ALREADY_EXISTS -
Cause: The specified key was not found in the database.
Runtime Error:DBIF_DSQL2_KEY_NOT_FOUNDon aNative SQLdatabase connection. -
Cause: No more memory available for a
Native SQLStatement.
Runtime Error:DBIF_DSQL2_NO_MEMORY -
Cause: The database object already exists in the database. You tried to create a database object (table, View, Index, ...) in the database. This object already existed.
Runtime Error:DBIF_DSQL2_OBJ_EXISTS -
Cause: You used the name of a table or a view that does not exist in the database.
Runtime Error:DBIF_DSQL2_OBJ_UNKNOWN -
Cause: SQL Error at the execution of a Native SQLcommand.
Runtime Error:DBIF_DSQL2_SQL_ERROR -
Cause: The maximum number of secondary database connections was exceeded.
Runtime Error:EXSQL_CONNECTION_LIMIT -
Cause: The maximum number of cursors was exceeded.
Runtime Error:EXSQL_DSQL_CURSOR_LIMIT
Non-Catchable Exceptions
-
Cause: The specified cursor does not exist. At a
CLOSEorSELECTcommand in Native SQL, a cursor was specified which is unknown to the cursor administration.
Runtime Error:EXSQL_DSQL_CURSOR_NOT_FOUND -
Cause: The specified cursor is already open. A cursor was specified at a
OPENcommand in Native SQL which the cursor administration knows as already opened.
Runtime Error:EXSQL_DSQL_DUPLICATE_CURSOR -
Cause: No more roll memory available. When processing a Native SQL Statement, the internal memory is required to prepare the SQL Call.
Runtime Error:EXSQL_DSQL_NOROLL -
Cause: An indicator variable has the wrong type. It must have the type INT2.
Runtime Error:EXSQL_DSQL_WRONG_IVAR_TYPE -
Cause: The connection name has already been assigned. At an
CONNECTcommand in Native SQL, a connection name was specified which is already used for another connection.
Runtime Error:EXSQL_ILLEGAL_CONNECTION -
Cause: At a
DISCONNECTcommand in Native SQL, the connection "DEFAULT" was specified. This connection cannot be terminated withDISCONNECT.
Runtime Error:EXSQL_ILLEGAL_DISCONNECTION -
Cause: A Native SQL command contains too many variables. As variables are
considered all
ABAPfields that are marked with a preceding colon(":") . If theINTOclause has the formINTO :wafor a work areawa, then all the fields ofwaare also considered variables.
Runtime Error:EXSQL_TOO_MANY_VARS -
Cause: At a
SET CONNECTIONorDISCONNECTcommand in Native SQL, a connection was specified that is unknown to the connection administration.
Runtime Error:EXSQL_UNKNOWN_CONNECTION -
Cause: Despite the assurance
INTO STRUCTURE, the target option, specified in theINTO-clause, is not structured.
Runtime Error:EXSQL_UNSTRUCTURED_INTO -
Cause: A LOB Variable has the wrong type. LOB Variables must have the type
string,xstring,c,xorn.
Runtime Error:EXSQL_WRONG_TYPE_FOR_LOB