ABAP Keyword Documentation → ABAP - Reference → Processing External Data → ABAP Database Accesses → Native SQL → EXEC SQL - Embedded 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 statically. 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
EXEC
andENDEXEC
, 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, multiple Native SQL statements can be included betweenEXEC
andENDEXEC
. Generally, the semicolon (;
) is used as the separator character. -
SAP-specific Native-SQL language elements can also be included between
EXEC
andENDEXEC
. 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 statement ENDEXEC
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
INSERT
or UPDATE would cause double rows with regard to the primary table key, no exception is raised. Instead,sy-subrc
is 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. Note that application programs should only use data from the current client. See also the associated security note and the programming guideline.
-
The obsolete addition
PERFORMING
(not allowed in classes) executes implicit cursor processing and must no longer be used. The obsolete statementEXIT FROM SQL
can be used to exit this type of processing. -
Native SQL statements used for transaction control
(
COMMIT
,ROLLBACK
) are detected by the database interface and the actions required at the end of a transaction are performed. -
The static embedding of Native SQL statements between
EXEC SQL
andENDEXEC
is replaced by dynamic passes to objects from ADBC classes. New features in the Native SQL in interface are now developed only in ADBC. Only ADBC should be used in new programs.
Example
The following example demonstrates how a simple embedded Native SQL statement can be replaced by
ADBC. The use of the
instance operator
NEW
removes the need for a helper variable of type CL_SQL_STATEMENT when creating objects.
"Static Native SQL
EXEC SQL.
COMMIT WORK
ENDEXEC.
"Dynamic Native SQL
NEW cl_sql_statement( )->execute_update( `COMMIT WORK` ).
Example
See the executable example for static 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: Illegal interruption of a database selection. The cursor has been closed.
Runtime Error:DBIF_DSQL2_INVALID_CURSOR
: -
Cause: There is insufficient memory available for aNative SQL statement.
Runtime Error:DBIF_DSQL2_NO_MEMORY
-
Cause: Database object already exists in the database. An attempt was made
to create a database object (for example, table, view, index) on the database, but this object already exists.
Runtime Error:DBIF_DSQL2_OBJ_EXISTS
-
Cause: The name of a table or view that does not exist on the database was used.
Runtime Error:DBIF_DSQL2_OBJ_UNKNOWN
-
Cause: An SQL error occurred while executing a native SQL command.
Runtime Error:DBIF_DSQL2_SQL_ERROR
-
Cause: The maximum number of database connections (connections) has been exceeded.
Runtime Error:EXSQL_CONNECTION_LIMIT
-
Cause: The maximum number of pointers (cursors) has been exceeded.
Runtime Error:EXSQL_DSQL_CURSOR_LIMIT
Non-Catchable Exceptions
-
Cause: The specified cursor does not exist. A
CLOSE
orSELECT
command in Native SQL has a specified cursor, but this cursor is unknown to cursor administration.
Runtime Error:EXSQL_DSQL_CURSOR_NOT_FOUND
-
Cause: The specified cursor is already open. An
OPEN
command command in Native SQL has a specified cursor, which the cursor administration knows is already open.
Runtime Error:EXSQL_DSQL_DUPLICATE_CURSOR
-
Cause: There is insufficient roll memory available. When a Native SQL statement is processed, 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. A
CONNECT
command in Native SQL has a specified connection name, which is already used for another connection.
Runtime Error:EXSQL_ILLEGAL_CONNECTION
-
Cause: The connection "DEFAULT" has been specified
for a
DISCONNECT
command in Native SQL. This connection cannot be terminated withDISCONNECT
.
Runtime Error:EXSQL_ILLEGAL_DISCONNECTION
-
Cause: A Native SQL command contains too many variables. Here, variables
are all ABAP fields that are marked with a preceding colon(":"). If the
INTO
clause has the formINTO :wa
for a work areawa
, then all the fields ofwa
also count as variables.
Runtime Error:EXSQL_TOO_MANY_VARS
-
Cause: A
SET CONNECTION
orDISCONNECT
command in Native SQL has a specified connection that is unknown to the connection administration.
Runtime Error:EXSQL_UNKNOWN_CONNECTION
-
Cause: Despite the assertion
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
,x
orn
.
Runtime Error:EXSQL_WRONG_TYPE_FOR_LOB