SAP NetWeaver AS ABAP Release 740, ©Copyright 2014 SAP AG. All rights reserved.
ABAP Keyword Documentation →
ABAP − Reference →
Processing External Data →
ABAP Database Accesses →
Native SQL →
Static Embedding of Native SQL →
EXEC SQL 
Short Reference
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 and ENDEXEC, 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 between EXEC and ENDEXEC. Generally, the semicolon
(;) is used as the separator character.
-
SAP-specific Native-SQL language elements can also be included between EXEC
and ENDEXEC. 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 were
not 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 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. Remember that application programs should only use the data in the current client. In
megatenancy systems, this is checked by the ABAP runtime environment. (See also
Cross-Client Database Access).
-
The obsolete addition PERFORMING
(not allowed in classes) executes implicit cursor processing and must no longer be used. The obsolete
statement EXIT 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 and ENDEXEC 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: 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_FOUND on a Native SQL database 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 CLOSE
or SELECT command 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
OPEN command 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 CONNECT
command in Native SQL, a connection name was specified which is already used for another connection.
Runtime Error: EXSQL_ILLEGAL_CONNECTION
-
Cause: At a DISCONNECT command in Native SQL,
the connection "DEFAULT" was specified. This connection cannot be terminated with DISCONNECT.
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
the INTO clause has the form INTO :wa for a work
area wa, then all the fields of wa are also considered variables.
Runtime Error: EXSQL_TOO_MANY_VARS
-
Cause: At a SET CONNECTION or DISCONNECT
command 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 the INTO-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 or n.
Runtime Error: EXSQL_WRONG_TYPE_FOR_LOB
Continue
EXEC SQL - Literals
EXEC SQL - Host Variables
EXEC SQL - OPEN, CLOSE, FETCH
EXEC SQL - EXECUTE
EXEC SQL - CONNECT
ENDEXEC