翻译:DECLARE Variable(已提交到MariaDB官方手册)
本文为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 s 和 HANDLER s
之前。
局部变量名不区分大小写。
局部变量的生效范围是在声明它的BEGIN ... END
之内。如果代码块中嵌套代码块,那嵌套中的代码可以引用上一级的变量,除非内层代码块定义的变量名和上层变量名相同。
TYPE OF / ROW TYPE OF
存储过程中使用
TYPE OF
和ROW TYPE OF
锚定数据类型的功能是从 MariaDB 10.3 引入的。
锚定数据类型时允许基于另一个对象来定义数据类型(例如表中行),而无需专门在声明语句中设置。如果锚定对象的数据类型改变,则自身也随之改变。这使得存储过程更容易维护,表中数据类型改变时,存储过程中的变量类型也自动随之改变。
使用ROW TYPE OF
定义的变量隐含了ROW变量,因此它们有相同的特性。无法在 LIMIT 子句中使用ROW TYPE OF
。
TYPE OF
和 ROW TYPE OF table_name
的实时数据类型在调用存储过程的开头就可以获取到。存储过程中对锚定对象所在表执行ALTER TABLE 或 DROP TABLE语句不会影响已锚定的变量类型,即使该变量是定义在ALTER TABLE 或 DROP TABLE 语句之后的(译者注:因为在存储过程中,执行所有动作之前,变量的类型就已经锚定结束)。
ROW TYPE OF cursor_name
变量的实时数据类型是在执行变量声明语句时才获取到的。数据类型仅只锚定一次,之后不再改变。如果游标中的ROW TYPE OF
变量是定义在一个循环之中,则数据类型在循环的开头就已经获取,且之后的循环不再改变。
在调用存储过程的开头,会检查TYPE OF
和 ROW 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官方手册)的更多相关文章
- 翻译:INSERT(已提交到MariaDB官方手册)
本文为mariadb官方手册:INSERT的译文. 原文:https://mariadb.com/kb/en/insert/我提交到MariaDB官方手册的译文:https://mariadb.com ...
- 翻译:SET Variable(已提交到MariaDB官方手册)
本文为mariadb官方手册:SET Variable的译文. 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手册的译文:https:/ ...
- 翻译:DECLARE HANDLER语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:DECLARE HANDLER的译文. 原文:https://mariadb.com/kb/en/library/declare-handler/我提交到MariaDB官 ...
- 翻译:用户变量(User-Defined Variable)(已提交到MariaDB官方手册)
本文为mariadb官方手册:User-Defined Variables的译文. 原文:https://mariadb.com/kb/en/user-defined-variables/我提交到Ma ...
- 翻译:CREATE FUNCTION语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:CREATE FUNCTION的译文. 原文:https://mariadb.com/kb/en/library/create-function/我提交到MariaDB官 ...
- 翻译:SET PASSWORD语句(已提交到MariaDB官方手册)
本文为mariadb官方手册:SET PASSWORD的译文. 原文:https://mariadb.com/kb/en/library/set-password/我提交到MariaDB官方手册的译文 ...
- 翻译:赋值操作符(:=)(已提交到MariaDB官方手册)
本文为mariadb官方手册:赋值操作符(:=)的译文. 原文:https://mariadb.com/kb/en/assignment-operator/ 我提交到MariaDB官方手册的译文:ht ...
- 翻译:last_value()函数(已提交到MariaDB官方手册)
本文为mariadb官方手册:LAST_VALUE()的译文. 原文:https://mariadb.com/kb/en/last_value/我提交到MariaDB官方手册的译文:https://m ...
- 翻译:group_concat()函数(已提交到MariaDB官方手册)
本文为mariadb官方手册:group_concat()函数的译文. 原文:https://mariadb.com/kb/en/group_concat/ 我提交到MariaDB官方手册的译文:ht ...
随机推荐
- queue deque
- python视频地址和链接
算法 链接:http://pan.baidu.com/s/1nvHmcZJ 密码:fwjg常用库 链接:http://pan.baidu.com/s/1o8uPvPg 密码:yp3w进阶-高级代码 链 ...
- 微信小程序------加导航
效果图如下 这个其实很简单 在app.json上面加点代码 "window":{ "backgroundTextStyle":"light" ...
- 2019/3/7 Java学习之多线程(基础)
Java学习之多线程 讲到线程,就必须要懂得进程,进程是相当于一个程序的开始到结束,而线程是依赖于进程的,没有进程,就没有线程.线程也分主线程和子线程,当在主线程开启子线程时,主线程结束,而子线程还可 ...
- vscode调试golang环境搭建及配置
准备VSCode 在官网下载最新版的VSCode: 安装Golang插件 打开扩展面板 VSCode->查看->扩展 找到Go插件 在搜索框里输入Go, 找到第二行写有 Rich Go l ...
- java基础0615
1. 1)2) 1)输出:Base 2)编译成功,但没有输出. 2. 编译成功,但没有输出. 3. 只有12行的话,不会新建文件.需要create~~ 4. public static void ...
- docker 2(local registry)
1.获取仓库镜像 ,sudo docker pull registry 2.sudo vim /etc/init/docker.conf 增加--insecure-registry IP:5000 3 ...
- 【.NET Core项目实战-统一认证平台】第三章 网关篇-数据库存储配置(1)
[.NET Core项目实战-统一认证平台]开篇及目录索引 本篇将介绍如何扩展Ocelot中间件实现自定义网关,并使用2种不同数据库来演示Ocelot配置信息存储和动态更新功能,内容也是从实际设计出发 ...
- 【高速接口-RapidIO】1、RapidIO协议概述
一.RapidIO背景介绍 RapidIO是由Motorola和Mercury等公司率先倡导的一种高性能. 低引脚数. 基于数据包交换的互连体系结构,是为满足和未来高性能嵌入式系统需求而设计的一种开放 ...
- vs2012升级vs2017后的一些坑
异常信息:未能加载文件或程序集"System.Web.Helpers... 未能加载文件或程序集"System.Web.Helpers, Version=2.0.0.0, Cult ...