MySQL 存储过程的 DECLARE 语句

在 MySQL 存储过程中,DECLARE 语句用于声明一个局部变量。这些局部变量只在存储过程内部可见,并且在存储过程执行完成后会被销毁。

在 MySQL 存储过程中,DECLARE 语句用于声明一个局部变量。这些局部变量只在存储过程内部可见,并且在存储过程执行完成后会被销毁。

DECLARE 语句用于定义程序的各种局部变量:

(1)本地变量

(2)条件和处理程序

(3)游标

注意:

(1)DECLARE 语句只允许在 BEGIN ... END 复合语句中使用,而且必须在其开始部分,即其他语句之前。

(2)DECLARE 语句声明必须遵循一定的顺序,游标声明必须出现在处理程序声明之前,变量和条件声明必须先于游标或处理程序声明。

声明局部变量

要声明局部变量,请使用 DECLARE 语句,语法:

DECLARE var_name [, var_name] ... type [DEFAULT value]

上述 DECLARE 语句用来在存储程序中声明局部变量,其中:

  • var_name 是局部变量名称

  • type 为局部变量的数据类型,如:varchar(10)、int 等。

  • DEFAULT 为局部变量提供默认值,DEFAULT 子句可以是一个表达式,也可以是一个常量。如果缺少 DEFAULT 子句,初始值就是 NULL。

例如:

CREATE PROCEDURE p_demo()
BEGIN
-- 未设置默认值,默认为 NULL
DECLARE username VARCHAR(50);
-- 设置默认值
DECLARE address VARCHAR(100) DEFAULT '成都市';
SELECT username,address;
END

调用存储过程:

mysql> call p_demo();
+----------+---------+
| username | address |
+----------+---------+
| NULL     | 成都市  |
+----------+---------+
1 row in set

Query OK, 0 rows affected

在数据类型和溢出检查方面,本地变量的处理方式与存储例程参数相同。

变量声明必须出现在游标或处理程序声明之前。例如:

BEGIN
   -- 下面语句非法的,错误如下:
   -- 1337 - Variable or condition declaration after cursor or handler declaration
DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' BEGIN /* 空代码块 */ END;
-- 未设置默认值,默认为 NULL
DECLARE username VARCHAR(50);
-- 设置默认值
DECLARE address VARCHAR(100) DEFAULT '成都市';
-- 声明了一个处理器()合法的
--DECLARE CONTINUE HANDLER FOR SQLSTATE '23000' BEGIN /* 空代码块 */ END;
-- 输出 username 和 address 变量的值
SELECT USERNAME,ADDRESS;
END

局部变量名称不区分大小写。允许使用的字符和引号规则与其他标识符相同。例如:

BEGIN
-- 未设置默认值,默认为 NULL
DECLARE username VARCHAR(50);
-- 设置默认值
DECLARE address VARCHAR(100) DEFAULT '成都市';
-- 输出 username 和 address 变量的值
SELECT USERNAME,ADDRESS;
END

变量赋值

变量可以直接使用set语句进行赋值。语法:

SET variable = expr [, variable = expr] ...

variable: {
   user_var_name
 | param_name
 | local_var_name
 | {GLOBAL | @@GLOBAL.} system_var_name
 | [SESSION | @@SESSION. | @@] system_var_name
}

可以使用 SELECT ... INTO var_list 或打开游标并使用 FETCH ... INTO var_list 将查询结果检索到局部变量中。

不允许为存储过程或函数参数或存储程序局部变量赋值 DEFAULT(例如,使用 SET var_name = DEFAULT 语句),在 MySQL 5.7 中,这会导致语法错误。

学习必须与实干相结合。 —— 泰戈尔
0 不喜欢
说说我的看法 -
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号