Stored procedures with output parameters
Oracle® stored procedures or stored
functions must be called with the input and output parameters specification in the
USING
clause of the EXECUTE
, OPEN
or
FOREACH
instruction. As in normal dynamic SQL, parameters must correspond by
position, and the IN/OUT/INOUT
options must match the parameter definition of the
stored procedure.
BEGIN
and END
keywords:PREPARE stmt FROM "begin proc1(?,?,?); end;"
Remark: Oracle stored procedures do not specify the size of number and character parameters. The size of output values (especially character strings) are defined by the calling context (i.e. the data type of the variable used when calling the procedure). When you pass a CHAR(10) to the procedure, the returning value will be filled with blanks to reach a size of 10 bytes.
Note that for technical reasons, the Oracle driver uses dynamic binding with OCIBindDynamic()
. The Oracle Call Interface does not support stored
procedures parameters with the CHAR
data type when using dynamic binding. You must
use VARCHAR2
instead of CHAR
to define character string parameters
for stored procedures.
MAIN
DEFINE n INTEGER
DEFINE d DECIMAL(6,2)
DEFINE c VARCHAR(200)
DATABASE test1
EXECUTE IMMEDIATE
"create procedure proc1("
|| " p1 in int,"
|| " p2 in out number,"
|| " p3 in out varchar2"
|| " )"
|| " is begin"
|| " p2:= p1 + 0.23;"
|| " p3:= 'Value = ' || to_char(p1);"
|| "end;"
PREPARE stmt FROM "begin proc1(?,?,?); end;"
LET n = 111
EXECUTE stmt USING n IN, d INOUT, c INOUT
DISPLAY d
DISPLAY c
END MAIN