zoukankan      html  css  js  c++  java
  • 翻译: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

  • 相关阅读:
    pycharm专业版破解
    XSS漏洞扫描工具:BruteXSS
    人生第一次成功的sql注入
    黑客学习之信息收集
    redhat 下搭建网站
    网络安全渗透--判断网站使用何种网页语言,判断网站所用服务器
    jqgrid表头上面再加一行---二级表头
    实验吧 burpsuie拦截修改请求
    实验吧 貌似有点难 伪造ip
    实验吧 这个看起来有点简单!&渗透测试工具sqlmap基础教程
  • 原文地址:https://www.cnblogs.com/f-ck-need-u/p/8637747.html
Copyright © 2011-2022 走看看