TechTip: Calling SQL Procedures on the Fly

  • Smaller Small Medium Big Bigger
  • Default Helvetica Segoe Georgia Times

Call SQL procedures from the RPG green-screen easily and retrieve the returned result sets if you are on V5R4 or later.

The command Call SQL Procedure (CALLSQLPRC or CALLP) allows us to call an SQL or external procedure and optionally retrieve some or all of the result sets returned by the procedure. It can be downloaded from the following links: English, Spanish.

How It's Made

The command CALLSQLPRC performs the calls to SQL­ procedures and the retrieval of the returned result sets by using the APIs of the SQL Client Level Interface (CLI), known in other environments as the ODBC interface. These APIs—available for any ILE language—allow us to open a connection with a relational database and run dynamic SQL statements.

Documentation of these APIs and their use can be found in the IBM Knowledge Center at "Database/Reference/SQL call level interface" and in the IBM i handbook Database: SQL Call Level Interface.

Opening a Connection with a Relational Database

The command CALLSQLPRC has no parameters. It shows a screen requesting the relational database we want to connect to, and the name and library of the procedure to be called, as shown in Figure 1:

TechTip: Calling SQL Procedures on the Fly - Figure 1

Figure 1: Initial screen shown by command CALLSQLPRC

Field Database can contain any local or remote database that is defined on the system—that is, shown by the command WRKRDBDIRE (Work with Relational Database Directory Entries). The value *LOCAL identifies the system database on the local system.

The only user (and password) allowed for the connection with any relational database is the user of the current interactive job (value *CURRENT for field User).

The connections opened by command CALLSQLPRC don't manage commitment control by themselves (value *NONE for field Commitment control). But the SQL procedures called, and the programs called by those SQL procedures, can start and end commitment control definitions.

Once a database, procedure name, and procedure library have been typed, the command checks whether there is already a connection to a database. If a connection exists, and it is to a database different from the one typed, the current connection is closed. Then, a new connection is opened with the typed database.

Specific Procedures

If the procedure entered has more than one specific procedure, a list of its specific procedures is shown as in Figure 2:

TechTip: Calling SQL Procedures on the Fly - Figure 2

Figure 2: List of specific procedures of a generic procedure

After selecting one of the specific procedures (with S, X, or 1), the procedure parameters are shown.


The screen with the procedure parameters is shown in Figure 3:

TechTip: Calling SQL Procedures on the Fly - Figure 3

Figure 3: List of parameters of a procedure

The data shown for each parameter are its number, mode (I, O, or I/O), length, type, and name.

The parameter types supported are the following:

Parameter Types






variable char








variable binary


small integer



big integer

Character and binary parameters can have any length, but the maximum number of characters shown in the display is 30.

Numeric parameters can be up to 30 digits long, but the maximum number of digits shown in the display is 11.

Parameters that are shown in the display with a shorter length will be preceded by an asterisk (*).

If the value returned by a procedure in a numeric parameter has over 11 significant digits, it will be truncated to be shown in the display, and one of the literals truncI, truncD, or truncID will indicate the part truncated (integer and/or decimal).

Result Sets

In addition to the parameters, the screen of Figure 3 shows a line that allows us to specify the returned result sets to be retrieved.

In field Result sets, type the positions of these result sets according to the order in which they are returned by the procedure. For example, 1 3 would indicate that you want to retrieve the first and third result sets returned. This field can be blank.

Field Prefix should contain the prefix of the files where the result sets are going to be stored. The file names consist of this prefix and the position of the result set—for example, C1, C2, etc.

An Update

In a previous article ("Format of Records Saved to a Save File, Part 2"), I included the command GETDLTRCD (Get Deleted Records) for version V5R4. This command allowed, in certain cases, to retrieve variable-length fields from deleted records.

In version 7.3, the internal management of variable-length fields has changed, and the traces that allowed us to locate the variable-length data of deleted records have been partially removed. As a consequence, the command GETDLTRCD cannot retrieve variable-length fields in 7.3 systems.

Anyway, this command can still be used to retrieve fixed-length fields from deleted records, even when the file contains variable-length, nullable or date-time fields.

You can download this command for versions 7.1 and 7.3 in English and Spanish