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;
  • 相关阅读:
    Fedora 14下安装使用rarlinux wang
    fedora 14 64位安装 flash player wang
    SQL中的 'N/A'含义
    Sql Sever中的replace()函数
    CompletableFuture的实际使用
    Asp.net检测系统是否装有.net环境
    JS与Asp.Net的传值
    JAVASCRIPT加密解密终级指南escape解密/eval加密/Encode加密原理
    在IIS上启用Gzip压缩(HTTP压缩)
    jquery批量上传图片
  • 原文地址:https://www.cnblogs.com/wonchaofan/p/13521303.html
Copyright © 2011-2022 走看看