The world's most popular open source database
CALLsp_name([parameter[,...]]) CALLsp_name[()]
The CALL statement invokes a stored
procedure that was defined previously with
CREATE PROCEDURE.
CALL can pass back values to its
caller using parameters that are declared as
OUT or INOUT parameters.
When the procedure returns, a client program can also obtain the
number of rows affected for the final statement executed within
the routine: At the SQL level, call the
ROW_COUNT() function; from C, call
the mysql_affected_rows() C API
function.
As of MySQL 5.0.30, stored procedures that take no arguments can
be invoked without parentheses. That is, CALL
p() and CALL p are equivalent.
To get back a value from a procedure using an
OUT or INOUT parameter, pass
the parameter by means of a user variable, and then check the
value of the variable after the procedure returns. (If you are
calling the procedure from within another stored procedure or
function, you can also pass a routine parameter or local routine
variable as an IN or INOUT
parameter.) For an INOUT parameter, initialize
its value before passing it to the procedure. The following
procedure has an OUT parameter that the
procedure sets to the current server version, and an
INOUT value that the procedure increments by
one from its current value:
CREATE PROCEDURE p (OUT ver_param VARCHAR(25), INOUT incr_param INT) BEGIN # Set value of OUT parameter SELECT VERSION() INTO ver_param; # Increment value of INOUT parameter SET incr_param = incr_param + 1; END;
Before calling the procedure, initialize the variable to be passed
as the INOUT parameter. After calling the
procedure, the values of the two variables will have been set or
modified:
mysql>SET @increment = 10;mysql>CALL p(@version, @increment);mysql>SELECT @version, @increment;+------------+------------+ | @version | @increment | +------------+------------+ | 5.0.25-log | 11 | +------------+------------+
If you write C programs that use the
CALL SQL statement to execute
stored procedures that produce result sets, you
must set the
CLIENT_MULTI_RESULTS flag, either explicitly,
or implicitly by setting
CLIENT_MULTI_STATEMENTS when you call
mysql_real_connect(). This is
because each such stored procedure produces multiple results: the
result sets returned by statements executed within the procedure,
as well as a result to indicate the call status. To process the
result of a CALL statement, use a
loop that calls
mysql_next_result() to determine
whether there are more results. For an example, see
Section 20.7.9, “C API Handling of Multiple Statement Execution”.
CLIENT_MULTI_RESULTS must also be set if
CALL is used to execute any stored
procedure that contains prepared statements. It cannot be
determined when such a procedure is loaded whether those
statements will produce result sets, so it is necessary to assume
that they will.
For programs written in a language that provides a MySQL
interface, there is no native method for directly retrieving the
results of OUT or INOUT
parameters from CALL statements. To
get the parameter values, pass user-defined variables to the
procedure in the CALL statement and
then execute a SELECT statement to
produce a result set containing the variable values. The following
example illustrates the technique (without error checking) for a
stored procedure p1 that has two
OUT parameters.
mysql_query(mysql, "CALL p1(@param1, @param2)"); mysql_query(mysql, "SELECT @param1, @param2"); result = mysql_store_result(mysql); row = mysql_fetch_row(result); mysql_free_result(result);
After the preceding code executes, row[0] and
row[1] contain the values of
@param1 and @param2,
respectively.
To handle INOUT parameters, execute a statement
prior to the CALL that sets the
user variables to the values to be passed to the procedure.


User Comments
Example:
DELIMITER $
create procedure spMySproc(IN iParamOne INT, IN iParamTwo INT)
begin
/* do stuff */
end$
DELIMITER ;
call spMySproc(1,1);
Here is an example by using you can pass name as parameter and can get customers id
Step 1.
DROP PROCEDURE sp_get_rec;
Step 2.
CREATE PROCEDURE sp_get_rec(OUT str_id int(3) , match_name CHAR(20) )
BEGIN
SELECT id into str_id FROM authors where name=match_name;
END
Step 3.
mysql > call sp_get_rec(@id,'Arvind');
Step 4.
mysql> select @id;
after doing this it will display id associated with that name if its in DB.
Thank you.
Add your own comment.