zoukankan      html  css  js  c++  java
  • 存储程序中的变量

     Local Variable DECLARE Statement

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

    该语句在存储的程序中声明局部变量。要提供变量的默认值,请包含一个 DEFAULT子句。该值可以指定为表达式;它不必是常数。如果缺少该DEFAULT子句,则初始值为NULL

    就数据类型和溢出检查而言,将本地变量像存储的例程参数一样对待。

    变量声明必须出现在游标或处理程序声明之前。

    局部变量的范围和解决方案

    局部变量的名称不应与表列的名称相同。如果一条SQL语句(例如一条 SELECT ... INTO语句)包含对列的引用和具有相同名称的已声明局部变量,则MySQL当前会将引用解释为变量的名称。请考虑以下过程定义:

    CREATE PROCEDURE sp1 (x VARCHAR(5))
    BEGIN
      DECLARE xname VARCHAR(5) DEFAULT 'bob';
      DECLARE newname VARCHAR(5);
      DECLARE xid INT;
    
      SELECT xname, id INTO newname, xid
        FROM table1 WHERE xname = xname;
      SELECT newname;
    END;

    MySQL xname在 SELECT语句中将其解释为对xname 变量的引用, 而不是对xname 的引用因此,在sp1()调用该过程时 , newname变量将返回该值'bob',而与table1.xname的值 无关 

    同样,以下过程中的游标定义包含一个SELECT引用语句xnameMySQL将此解释为对该名称变量的引用,而不是列引用。

    CREATE PROCEDURE sp2 (x VARCHAR(5))
    BEGIN
      DECLARE xname VARCHAR(5) DEFAULT 'bob';
      DECLARE newname VARCHAR(5);
      DECLARE xid INT;
      DECLARE done TINYINT DEFAULT 0;
      DECLARE cur1 CURSOR FOR SELECT xname, id FROM table1;
      DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
    
      OPEN cur1;
      read_loop: LOOP
        FETCH FROM cur1 INTO newname, xid;
        IF done THEN LEAVE read_loop; END IF;
        SELECT newname;
      END LOOP;
      CLOSE cur1;
    END;
  • 相关阅读:
    火星A+B
    分西瓜(DFS)
    H.数7(模拟)
    镜像树(dfs)
    锐雯上单不给就送(矩阵快速幂)
    STL容器
    优先队列(和fence repair完全一样)
    x位全排列(next_permutation)
    fence repair(队列水过)
    线段相交
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/13521303.html
Copyright © 2011-2022 走看看