The scope of a local variable is within the
BEGIN ...
END block where it is declared. The variable can be
referred to in blocks nested within the declaring block, except
those blocks that declare a variable with the same name.
Local variables are within scope only during stored routine
execution, so references to them are disallowed within prepared
statements because those are global to the current session and
the variables might have gone out of scope when the statement is
executed. For example, SELECT ... INTO
cannot be used as
a prepared statement.
local_var
Local variable names should not be the same as column names. If
an SQL statement, such as a
SELECT ...
INTO statement, contains a reference to a column and a
declared local variable with the same name, MySQL currently
interprets the reference as the name of a variable. For example,
in the following statement, xname is
interpreted as a reference to the xname
variable rather than the
xname column:
CREATE PROCEDURE sp1 (x VARCHAR(5))
BEGIN
DECLARE xname VARCHAR(5) DEFAULT 'bob';
DECLARE newname VARCHAR(5);
DECLARE xid INT;
SELECT xname,id INTO newname,xid
FROM table1 WHERE xname = xname;
SELECT newname;
END;
When this procedure is called, the newname
variable returns the value 'bob' regardless
of the value of the table1.xname column.
See also Section D.1, “Restrictions on Stored Routines, Triggers, and Events”.

User Comments
Add your own comment.