skip to main content
OpenEdge Data Management: DataServer for ODBC
Stored Procedure Reference : RUN STORED-PROCEDURE statement
 

RUN STORED-PROCEDURE statement

Runs a non-ABLstored procedure or allows you to send SQL to an SQL-based data source using a DataServer.

Syntax

RUN STORED-PROCEDURE procedure
[integer-field = PROC-HANDLE]
[ NO-ERROR ]
[ ( parameter[ , parameter]... ) ]
procedure
The name of the stored procedure that you want to run or the ABL built-in procedure name, send–sql–statement, to send SQL to an SQL-based data source.
integer–field = PROC–HANDLE
Assigns a value to the specified integer field or variable (integer–field) that uniquely identifies the stored procedure returning results from the non-OpenEdge database or that uniquely identifies the SQL cursor used to retrieve results from an ODBC-compliant data source.
NO–ERROR
Specifies that any ERROR conditions that the RUN STORED–PROCEDURE statement produces are suppressed. Before you close a stored procedure, check the ERROR–STATUS handle for information on any errors that occurred. You receive an error when you attempt to close a stored procedure that did not start. The NO-ERROR option must appear before any run-time parameter list.
parameter
A run-time parameter to be passed to the stored procedure. A parameter has the following syntax:
Syntax
[INPUT | OUTPUT | INPUT-OUTPUT ][ PARAM parameter-name = ]expression
An expression is a constant, field name, variable name, or expression. INPUT is the default. OUTPUT and INPUT–OUTPUT parameters must be record fields or program variables.
If you run send–sql–statement for an SQL-based data source, you must pass a single character expression parameter containing the SQL statement you want the data source to execute.
If you do not specify parameter–name (the name of a keyword parameter defined by the stored procedure), you must supply all of the parameters in correct order. If you do specify parameter–name, you must precede your assignment statement with the keyword PARAM. If you do not supply a required parameter, and no default is specified in the stored procedure, you receive a run-time error.

Examples

This procedure runs the stored procedure pcust and writes the results of the stored procedure into the ABL buffer, proc–text–buffer:
DEFINE VARIABLE iHandle AS INTEGER NO-UNDO.

RUN STORED-PROCEDURE pcust iHandle = PROC-HANDLE
  (10, OUTPUT 0, OUTPUT 0) NO-ERROR.
IF ERROR-STATUS:ERROR THEN
MESSAGE "Stored Procedure failed to run".

FOR EACH proc-text-buffer WHERE PROC-HANDLE = iHandle:
DISPLAY proc-text-buffer.
END.
CLOSE STORED-PROCEDURE pcust WHERE PROC-HANDLE = iHandle.
This procedure uses the send–sql–statement option of the RUN STORED–PROCEDURE statement to send SQL to an ODBC-compliant data source. It writes the results of the stored procedure into the ABL buffer, proc–text–buffer:
DEFINE VARIABLE iHandle AS INTEGER NO-UNDO.

RUN STORED-PROC send-sql-statement iHandle = PROC-HANDLE
  ("SELECT name, custnum FROM customer").
FOR EACH proc-text-buffer WHERE PROC-HANDLE = iHandle:
  DISPLAY proc-text_buffer.
END.
CLOSE STORED-PROC send-sql-statement WHERE PROC-HANDLE = iHandle.
This code example shows how to trap errors from the non-OpenEdge RDBMS within a procedure:
DEFINE VARIABLE iHandle AS INTEGER NO-UNDO.
DEFINE VARIABLE ix      AS INTEGER NO-UNDO.

RUN STORED-PROC send-sql-statement iHandle = PROC-HANDLE NO-ERROR
("select count (*) from pcust.customer where name between 'A' and 'Z' ").

IF ERROR STATUS:ERROR THEN DO:
DO ix = 1 TO ERROR-STATUS:NUM-MESSAGES:
MESSAGE "error" ERROR-STATUS:GET-NUMBER(ix)
      ERROR-STATUS:GET-MESSAGE(ix).
END.
END.

FOR EACH proc-text-buffer.
DISPLAY proc-text-buffer.
END.

CLOSE STORED-PROC send-sql-statement WHERE PROC-HANDLE = iHandle.

Note

The RUN STORED–PROCEDURE statement starts a transaction with the same scope as transactions started with the UPDATE statement.

See also

CLOSE STORED-PROCEDURE statement, PROC-HANDLE function, PROC-STATUS function