存储过程变量类型 MariaDB 知识库

 2024-02-20 03:02:10  阅读 0

语法:

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

描述

该语句用于该语句用于在存储过程中声明局部变量。 您可以使用关键字来指定变量的默认值。 变量的值允许是表达式(甚至是子查询),并且不要求是常量值。 如果未指定此默认值,则它不一定是常量。 如果未指定子句,则变量的初始值为 NULL。

局部变量与存储过程的参数类似,都会进行数据类型和溢出的相关检查。 请参阅 获取更多信息。

局部变量必须在 s、s 和 s 之前声明。

局部变量名不区分大小写。

局部变量的有效范围是在声明它的 BEGIN ... END 内。 如果代码块嵌套在代码块中,则嵌套代码可以引用上层变量,除非内部代码块定义的变量名与上层变量名相同。

类型/行类型

与 10.3

10.3 中引入了使用 TYPE OF 和 ROW TYPE OF 来锚定存储过程中的数据类型的功能。

锚定数据类型允许基于另一个对象(例如表中的行)定义数据类型,而无需在声明语句中专门设置它。 如果锚定对象的数据类型发生变化,则锚定对象本身也会发生变化。 这使得存储过程更易于维护。 当表中的数据类型改变时,存储过程中的变量类型也会自动改变。

使用 ROW TYPE OF 定义的变量隐含 ROW 变量,因此它们具有相同的特征。 ROW TYPE OF 不能在 LIMIT 子句中使用。

实时数据类型TYPE OF和ROW TYPE OF可以在调用存储过程开始时获取。 在存储过程中对锚定对象所在的表执行 ALTER TABLE 或 DROP TABLE 语句不会影响锚定变量的类型,即使该变量是在 ALTER TABLE 或 DROP TABLE 语句之后定义的(译者注:因为在存储过程,变量的类型在执行所有操作之前被锚定)。

ROW TYPE OF 变量的实时数据类型是在执行变量声明语句时获得的。 数据类型仅锚定一次,此后不会更改。 如果在循环中定义游标中的ROW TYPE OF变量,则在循环开始时获取数据类型,并且在后续循环中不会改变。

在调用存储过程的开始,检查由 TYPE OF 和 ROW TYPE OF 锚定的表是否存在。 但是,当您创建存储过程或函数时,不会检查变量引用的表是否存在。

例子

10.x 中的 TYPE OF 和 ROW TYPE OF:

DECLARE tmp TYPE OF t1.a; -- 基于表{{t1}}中的{{a}}列获取数据类型
DECLARE rec1 ROW TYPE OF t1; -- 锚定表{{t1}}中行数据类型
DECLARE rec2 ROW TYPE OF cur1; -- 基于游标{{cur1}}获取行数据类型

也可以看看

标签: 变量 存储 类型

如本站内容信息有侵犯到您的权益请联系我们删除,谢谢!!


Copyright © 2020 All Rights Reserved 京ICP5741267-1号 统计代码