翻译: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 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

回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html

回到网站架构系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7576137.html


回到数据库系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7586194.html


转载请注明出处:http://www.cnblogs.com/f-ck-need-u/p/8637747.html

注:若您觉得这篇文章还不错请点击右下角推荐,您的支持能激发作者更大的写作热情,非常感谢!

原文地址:https://www.cnblogs.com/f-ck-need-u/p/8637747.html

时间: 2024-08-29 13:59:05

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

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

本文为mariadb官方手册:SET Variable的译文. 原文:https://mariadb.com/kb/en/set-variable/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/set-variable/ 语法 SET var_name = expr [, var_name = expr] ... 存储程序stored programs中的SET语句是普通SET语句的一个扩展功能. 变量引用的时候,可以引用存储程序内部.全局系统变

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

本文为mariadb官方手册:DECLARE HANDLER的译文. 原文:https://mariadb.com/kb/en/library/declare-handler/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/declare-handler/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnblogs.c

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

本文为mariadb官方手册:LAST_VALUE()的译文. 原文:https://mariadb.com/kb/en/last_value/我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/last_value/ 语法 LAST_VALUE(expr,[expr,...]) 描述 LAST_VALUE()对所有表达式求值,并返回最后一个值. 这在结合使用@var:=expr为变量赋值时很有用.例如,当你想要从updated/deleted的行中获

翻译:select into outfile(已提交到MariaDB官方手册)

本文为mariadb官方手册:SELECT INTO OUTFILE的译文. 原文:https://mariadb.com/kb/en/select-into-outfile/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/select-into-outfile/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnbl

翻译:load data infile(已提交到MariaDB官方手册)

本文为mariadb官方手册:LOAD DATA INFILE的译文. 原文:https://mariadb.com/kb/en/load-data-infile/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/load-data-infile/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnblogs.com/f

翻译:replace into语句(已提交到MariaDB官方手册)

本文为mariadb官方手册:REPLACE INTO的译文. 原文:https://mariadb.com/kb/en/replace/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/replace/ 回到Linux系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7048359.html 回到网站架构系列文章大纲:http://www.cnblogs.com/f-ck-need-u/p/7576137.h

翻译:XtraDB/InnoDB中的AUTO_INCREMENT处理方式(已提交到MariaDB官方手册)

本文为mariadb官方手册:XtraDB/InnoDB中的AUTO_INCREMENT处理方式的译文. 原文:https://mariadb.com/kb/en/auto_increment-handling-in-xtradbinnodb/ 我提交到MariaDB官方手册的译文:https://mariadb.com/kb/zh-cn/auto_increment-handling-in-xtradbinnodb/ 回到Linux系列文章大纲:http://www.cnblogs.com/f

SQL Server已提交读快照隔离级别的设置

如果要把SQL Server数据库事务隔离级别设置为已提交读快照隔离 如果直接运行下面的语句: ALTER Database [mydbname] SET READ_COMMITTED_SNAPSHOT ON 会可能被阻塞很长时间.我这边在正式环境测试过4个小时都没有执行完. 你可以选择运行下面的语句: if(charindex('Microsoft SQL Server 2005',@@version) > 0) begin declare @sql varchar(8000) select

本人为巨衫数据库(开源NoSQL)写的C#驱动,支持Linq,全部开源,已提交github

一.关于NoSQL的项目需求 这些年在做AgileEAS.NET SOA 中间件平台的推广.技术咨询服务过程之中,特别是针对我们最熟悉的医疗行业应用之中,针对大数据分析,大并发性能的需求,我们也在慢慢的引用NoSQL技术来满足数据分析与性能等多方面的需要,也进一步完善我们的SOA基石架构风格: 在早些年,对NoSQL不是很了解这前,后端数据存储都是存储的单一的关系数据库之上,但是在很多时间,这并不是最优的,比如在医疗用户之中针对一个病人的相关数据展示,及相关性分析,关于数据库就不是最优的,另外一