本文为mariadb官方手册:DECLARE Variable的译文。

原文:https://mariadb.com/kb/en/library/declare-variable/
我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/declare-variable/

语法:

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

描述

该语句用在该语句用来在存储程序stored programs中声明本地变量。可以用DEFAULT 关键字为变量指定默认值。变量的值允许是一个表达式(甚至子查询),并不要求它一定是一个常量值。如果不指定 这个默认值也不一定是常量。如果不指定DEFAULT子句,则变量的初始值为NULL

本地变量和存储过程的参数类似,会对关于数据类型和溢出做相关检查。更多信息参考CREATE PROCEDURE

局部变量必须声明在CONDITION s, CURSOR sHANDLER s之前。

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

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

TYPE OF / ROW TYPE OF

存储过程中使用 TYPE OFROW TYPE OF 锚定数据类型的功能是从 MariaDB 10.3 引入的。

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

使用ROW TYPE OF定义的变量隐含了ROW变量,因此它们有相同的特性。无法在 LIMIT 子句中使用ROW TYPE OF

TYPE OFROW TYPE OF table_name的实时数据类型在调用存储过程的开头就可以获取到。存储过程中对锚定对象所在表执行ALTER TABLEDROP TABLE语句不会影响已锚定的变量类型,即使该变量是定义在ALTER TABLEDROP TABLE 语句之后的(译者注:因为在存储过程中,执行所有动作之前,变量的类型就已经锚定结束)。

ROW TYPE OF cursor_name 变量的实时数据类型是在执行变量声明语句时才获取到的。数据类型仅只锚定一次,之后不再改变。如果游标中的ROW TYPE OF变量是定义在一个循环之中,则数据类型在循环的开头就已经获取,且之后的循环不再改变。

在调用存储过程的开头,会检查TYPE OFROW TYPE OF所锚定的表是否存在。但在创建存储过程CREATE PROCEDURE或函数CREATE FUNCTION时,不会检查变量所引用的表是否存在。

示例

DECLARE tmp TYPE OF t1.a; -- 基于表{{t1}}中的{{a}}列获取数据类型

DECLARE rec1 ROW TYPE OF t1; -- 锚定表{{t1}}中行数据类型

DECLARE rec2 ROW TYPE OF cur1; -- 基于游标{{cur1}}获取行数据类型

See Also

翻译:DECLARE Variable(已提交到MariaDB官方手册)的更多相关文章

  1. 翻译:INSERT(已提交到MariaDB官方手册)

    本文为mariadb官方手册:INSERT的译文. 原文:https://mariadb.com/kb/en/insert/我提交到MariaDB官方手册的译文:https://mariadb.com ...

  2. 翻译:SET Variable(已提交到MariaDB官方手册)

    本文为mariadb官方手册:SET Variable的译文. 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手册的译文:https:/ ...

  3. 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:DECLARE HANDLER的译文. 原文:https://mariadb.com/kb/en/library/declare-handler/我提交到MariaDB官 ...

  4. 翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)

    本文为mariadb官方手册:User-Defined Variables的译文. 原文:https://mariadb.com/kb/en/user-defined-variables/我提交到Ma ...

  5. 翻译:CREATE FUNCTION语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:CREATE FUNCTION的译文. 原文:https://mariadb.com/kb/en/library/create-function/我提交到MariaDB官 ...

  6. 翻译:SET PASSWORD语句(已提交到MariaDB官方手册)

    本文为mariadb官方手册:SET PASSWORD的译文. 原文:https://mariadb.com/kb/en/library/set-password/我提交到MariaDB官方手册的译文 ...

  7. 翻译:赋值操作符(:=)(已提交到MariaDB官方手册)

    本文为mariadb官方手册:赋值操作符(:=)的译文. 原文:https://mariadb.com/kb/en/assignment-operator/ 我提交到MariaDB官方手册的译文:ht ...

  8. 翻译:last_value()函数(已提交到MariaDB官方手册)

    本文为mariadb官方手册:LAST_VALUE()的译文. 原文:https://mariadb.com/kb/en/last_value/我提交到MariaDB官方手册的译文:https://m ...

  9. 翻译:group_concat()函数(已提交到MariaDB官方手册)

    本文为mariadb官方手册:group_concat()函数的译文. 原文:https://mariadb.com/kb/en/group_concat/ 我提交到MariaDB官方手册的译文:ht ...

随机推荐

  1. rest_framework登录组件,权限组件

    昨日回顾: -HyperlinkedIdentityField(用来生成url),传三个参数 -实例化序列化类的时候,BookSerializer(ret, many=True, context={' ...

  2. java面试一、1.1基础

    免责声明:     本文内容多来自网络文章,转载为个人收藏,分享知识,如有侵权,请联系博主进行删除. 基础篇 1.1Java基础 面向对象的特征:继承.封装和多态 三大特性是:封装,继承,多态 所谓封 ...

  3. windows下qt的.exe的dll文件怎么配齐

    用qt自带的windeploy工具即可 win键打开开始菜单 找到qt目录下的qt for desktop(mingw)并打开 qtcreater或者vs打开要部署的项目,构建成release模式,运 ...

  4. OpenCV Mat格式存储YUV图像

    YUV图像用的比较多,而且YUV图像的格式众多(YUV格式可以参考YUV pixel formats),如何用OpenCV的Mat类型来存储YUV图像也是经常遇到的问题. 对于YUV444图像来说,就 ...

  5. 包建强的培训课程(2):Android与设计模式

    @import url(http://i.cnblogs.com/Load.ashx?type=style&file=SyntaxHighlighter.css);@import url(/c ...

  6. 64位 windows10,MYSQL8.0.13重置密码(忘记密码或者无法登录)

    上一节的MySQL的配置安装里,并没有用到配置文件my.ini.那在MYSQL8.0.13如何解决密码重置问题呢.我去网上搜了好多的资料都是改配置文件my.ini的,后来终于找到了一条命令:操作步骤如 ...

  7. 如何阅读Java源码?

    阅读本文大概需要 3.6 分钟. 阅读Java源码的前提条件: 1.技术基础 在阅读源码之前,我们要有一定程度的技术基础的支持. 假如你从来都没有学过Java,也没有其它编程语言的基础,上来就啃< ...

  8. Java变量与运算

    变量 1.变量名可以使用 数字.字母.下划线.$符号.数字包括 '0'~'9' 和某种语言中表示数字的任何 Unicode 字符.字母包括 'A'~'Z'.'a'~'z' 和某种语言中表示字母的任何 ...

  9. Metasploit Framework(5)弱点扫描

    文章的格式也许不是很好看,也没有什么合理的顺序 完全是想到什么写一些什么,但各个方面都涵盖到了 能耐下心看的朋友欢迎一起学习,大牛和杠精们请绕道 当我们发现了目标机器开放的端口,开启的服务等等之后 就 ...

  10. 对List集合中的对象中的某个属性进行排序

    今天在项目中遇到的问题,不能在sql中进行order by.所以将数据库中查询出来的集合,在java代码中进行排序 Collections.sort(list, new Comparator<H ...