精华内容
下载资源
问答
  • mysql存储过程定义变量
    2022-02-14 10:31:16

    1.局部变量

    用户自定义,在begin/end块中有效

    语法:declare  变量名  数据类型  [default 默认值]
    举例:declare  name  varchar(10);
    delimiter  $
    create  procedure  func()
    begin
        declare name varchar(10) default '张三';
        set name = '李四';--给变量赋值
        select name;--输出变量的值
    end $
    delimiter;
    
    call func();--调用

    另一种赋值方式:用select...into...将查询结果赋值给变量 。

    查询的返回结果必须是单行单列,例如

    delimiter  $
    create  procedure  func()
    begin
        declare name varchar(10);
        /*将查询结果classname赋值给变量name*/
        SELECT classname into name from class WHERE classname='数学';
        select name;
    end $
    delimiter;

    2.用户变量

    当前会话连接有效,类比java的成员变量

    语法:set @变量名;
    delimiter  $
    create  procedure  func()
    begin
       set @name='张三';
    end $
    delimiter;
    
    call func();--调用一次后,@name变量就可以在外部使用了
    SELECT @name;

    3.系统变量

    • 系统变量又分为全局变量与会话变量
    • 全局变量在Mysql启动时由服务器自动将它们初始化为默认值,这些默认值可以通过my.ini文件修改
    • 会话变量在每次建立一个新的连接时,由Mysql初始化。mysql会将当前所有全局变量的值复制一份,来作为会话变量。
    • 全局变量与会话变量的区别在于,对全局变量修改会影响到整个服务器,但是对会话变量修改,只会影响当前会话(也就是当前·数据库的连接)
    • 有些系统变量的值可以利用语句来动态修改,但是有些变量的值是只读的,对于那些可更改的系统变量,可以利用set语句修改
    --系统变量(全局变量)
    --查看全局变量
    show  global variables;
    --查看某全局变量
    select  @@gloabal.变量名;
    --修改全局变量的值
    set gloabal 变量名 = ;
    --系统变量(会话变量)
    --查看会话变量
    show session variables;
    --查看某会话变量
    select @@session.变量名;
    --修改会话变量值
    set session 变量名 = ;

    更多相关内容
  • 一、变量定义 mysql中变量定义用declare来定义...二、mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set来操作,可以是常量或表达式如果下 代码如下: set var_name= [,var_name expr]
  • check the manual that corresponds to your MySQL server version for the right syntax to use near '    SET mysort = 1;   DECLARE done tinyint; SET done = 1; D' at line 4
  • MySQL中,可以使用DECLARE关键字来定义变量定义变量的基本语法如下: DECLARE var_name[,…] type [DEFAULT value] 关键字DECLARE是用来声明变量的; 参数var_name是变量的名称,可以同时定义多个变量; ...

    目录

    一、在存储过程中定义变量

    1.定义变量 

    2.为变量赋值

      ①使用set关键词赋值

      ②使用SELECT…INTO语句为变量赋值

    二、使用@创建用户变量 


    一、在存储过程中定义变量

        在存储过程和函数中,可以定义和使用变量。用户可以使用关键字DECLARE来定义变量,然后为变量赋值。这些变量的作用范围是在BEGIN…END程序段中。 

    1.定义变量 

        在MySQL中,可以使用DECLARE关键字来定义变量。定义变量的基本语法如下: 

    DECLARE var_name[,…] type [DEFAULT value]
    • 关键字DECLARE是用来声明变量的;
    • 参数var_name是变量的名称,可以同时定义多个变量;
    • 参数type用来指定变量的类型;
    • DEFAULT value子句将变量默认值设置为value,没有使用DEFAULT子句时,默认值为NULL。 

        定义变量cid,数据类型为INT型,默认值为10,代码如下: 

    declare cid int default 10;

    2.为变量赋值

      ①使用set关键词赋值

          SET语句的基本语法如下: 

    SET var_name=expr[,var_name=expr]…  #可以是确定值,也可以是表达式
    • 关键字SET用来为变量赋值;
    • 参数var_name是变量的名称;
    • 参数expr是赋值表达式。一个SET语句可以同时为多个变量赋值,各个变量的赋值语句之间用逗号隔开。 

        例如,将变量temp_id赋值为88,代码如下: 

    set temp_id=88;

    ②使用SELECT…INTO语句为变量赋值

          其基本语法如下:

    SELECT col_name[,…] INTO var_name[,…]     
         FROM table_name WHERE condition  
    • 参数col_name表示查询的字段名称;
    • 参数var_name是变量的名称;
    • 参数table_name指表的名称;
    • 参数condition指查询条件。 

        在下面student表和class表创建存储过程proc_query_student, 要求输入学生id,返回学生所在班级以及班级人数:

    delimiter $$
    create procedure proc_query_student(in sid int,out cname varchar(64),out ccount int)
    begin
        declare temp_cid int;
        declare temp_cname varchar(64);
        declare temp_ccount int;
        select class_id into temp_cid from student where id=sid;
        select name,count into temp_cname,temp_ccount from class where id=temp_cid;
        set cname=temp_cname,ccount=temp_ccount;
    end;
    $$
    
    mysql> delimiter ;

    二、使用@创建用户变量 

        使用@关键字创建“用户变量”,“用户变量的作用范围”在整个当前对话中,其语法形式如下:

    @ var_name;

        例如创建“用户变量”调用上面的存储过程,并使用select语句查看变量:

    call proc_query_student(3,@name,@count);
    select @name,@count;

        查询结果:

    🍀🍀🍀🍀🍀🍀🍀🍀

    展开全文
  • mysql存储过程定义变量有三种方式 declare,set,select 1.declare declare 变量名 变量类型 default 默认值; declare a int DEFAULT 2; declare定义的变量 相当于一个局部变量 在end之后失效,...

    在mysql存储过程中定义变量有三种方式 declare,set,select

    1.declare

    declare 变量名 变量类型  default  默认值;

    declare a int DEFAULT 2;

     

     

    declare定义的变量 相当于一个局部变量  在end之后失效,而且declare只能在begin,end中定义。

     

     

    2.set

    set @变量名=值

    此处的变量不需要声明,mysql会自动根据值类型来确定类型,这种变量要在变量名称前面加上“@”符号,叫做会话变量,代表整个会话过程他都是有作用的,这个有点类似于全局变量一样。

     

     

    3.select

    同set

     

     

    转载于:https://www.cnblogs.com/missingLBJ/p/8529466.html

    展开全文
  • 存储过程中的变量定义

    千次阅读 2021-01-21 13:14:38
    MySQL存储过程常见的变量:局部变量、用户变量、系统变量……一、局部变量过程体中,可以声明局部变量,用来临时保存一些值。1、定义局部变量语法:DECLARE var_name[, var_name] ... type [DEFAULT value];其中,...

    As we all know,MySQL的存储过程就类似于脚本,既然似脚本就会有使用到变量的时候。

    MySQL存储过程常见的变量:局部变量、用户变量、系统变量……

    一、局部变量

    在过程体中,可以声明局部变量,用来临时保存一些值。

    1、定义局部变量语法:

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

    其中,type为MySQL的数据类型,如:int、float、date、varchar(length)

    注意:

    ①DECLARE用来声明局部变量,且DECLARE仅被用在BEGIN ... END复合语句里,并且必须在复合语句的开头,在任何其它语句之前;可以被用在嵌套的块中,除了那些用相同名字声明变量的块。

    ②如果要给变量提供一个默认值,使用DEFAULT子句(值可以是常数,也可以指定为一个表达式);如果没有DEFAULT子句,初始值为NULL。

    2、基本格式:

    CREATE PROCEDURE sp_name ([proc_parameter[,...]])

    BEGIN

    DECLARE var_name1 type [DEFAULT value];

    DECLARE var_name2 type [DEFAULT value];

    DECLARE……;

    [characteristic ...];

    END

    例1:创建过程,为局部变量指定默认值,并调用该过程

    mysql>delimiter $$

    mysql> create procedure test1(out num1 int)->begin-> declare num2 int default 100;-> set num1=num2;->end->$$

    mysql>delimiter ;

    mysql>call test1(@num);

    mysql> select@num;+------+

    | @num |

    +------+

    | 100 |

    +------+

    解析:

    创建test1存储过程:输出的是num1变量的值,声明局部变量num2是int类型、默认值是100,用set将num2的值(未处理,则默认值)赋给num1;

    调用test1:用用户变量num去接收存储过程的输出值num1……

    默认值除了字面量,还可以是复杂的表达式,包括标量子查询

    例2:创建过程,使用所有球员的数量来初始化一个变量

    mysql>delimiter $$

    mysql> create procedure test2(out num1 int)->begin-> declare num2 int default(select count(*) fromPLAYERS);-> set num1=num2;->end$$mysql>delimiter ;

    mysql>call test2(@num);mysql> select@num;+------+

    | @num |

    +------+

    | 14 |

    +------+

    注意:MySQL不支持数组作为局部变量。

    3、局部变量的作用域:

    也就是变量能正常使用而不出错的程序块的范围。

    在嵌套块的情况下,

    在外部块中声明的变量可以在内部块中直接使用;

    在内部块中声明的变量只能在内部块中使用。

    4d642006509b50e8077cc4f4d4170260.png

    解析:变量v2只能用在内部块b2中,块b3中的set语句和最后一条set语句都是错误的。

    二、用户变量

    >用户变量与数据库连接有关:在当前连接中声明的变量,在连接断开的时候,就会消失;在此连接中声明的变量无法在另一连接中使用。

    >一个@符号表示的就是用户变量。

    1、用户变量的定义(set、select):

    1)set语句为用户变量赋值:

    可以使用“=”或“:=”作为分配符;

    分配给每个变量的expr可以为整数、实数、字符串或者NULL值;

    mysql> set @zjc:=999;

    mysql> select@zjc;+------+

    | @zjc |

    +------+

    | 999 |

    +------+

    2)select语句为用户变量赋值:

    分配符必须为“:=”而不能用“=”,因为在非SET语句中=被视为一个比较操作符;

    mysql> select @abc:=123;+-----------+

    | @abc:=123 |

    +-----------+

    | 123 |

    +-----------+mysql> select@abc;+------+

    | @abc |

    +------+

    | 123 |

    +------+

    注意:

    ①用户变量随处可以定义,随处可以使用;不定义可以直接使用(值默认为null)。

    ②用户变量的变量名的形式:@var_name,要有@符号。

    ③滥用用户变量会导致程序难以理解及管理。

    拓展之变量赋值:set语法

    MySQL里面的变量是不严格限制数据类型的,变量的数据类型根据赋给变量的值而随时变化。

    SET variable_assignment [, variable_assignment] ...

    variable_assignment:

    user_var_name=expr|[GLOBAL | SESSION] system_var_name =expr|[@@global. | @@session. | @@] system_var_name = expr

    ##用来给用户变量、系统变量赋值,也可以给过程中的局部变量赋值。

    注意:

    set系统变量时,不带作用域修饰,默认是指会话作用域;

    (特别注意,有些系统变量不带作用域修饰,无法设置,因此最好都带上作用域设置系统变量)。

    2、用户变量的作用域

    只要是在当前连接定义的用户变量,在当前连接里用都是OK的,除此之外都不行。

    3、与局部变量区别:

    局部变量只有变量名字,没有@符号;用户变量名前有@符号。

    都是先定义,再使用;未定义的变量,select值为空。

    局部变量只在存储过程内部使用,在过程体外是没有意义的,当begin-end块处理完后,局部变量就消失;而用户变量可以用在存储过程的内部和外部。

    Tips:在存储过程内部,使用局部变量,不要使用用户变量。

    三、MySQL变量之用户变量与系统变量

    1、用户变量如上所述@var_name(一个@符号)

    ①用户变量和数据库连接有关,连接后声明变量,连接断开后,自动消失;

    ②select一个没有赋值的用户变量,返回NULL,也就是没有值;

    Mysql的变量类似于动态语言,变量的值随所要赋的值的类型而改变。

    2、系统变量:根据系统变量的作用域分为:全局变量与会话变量(两个@符号)

    ①全局变量(@@global.)

    在MySQL启动的时候由服务器自动将全局变量初始化为默认值;

    全局变量的默认值可以通过更改MySQL配置文件(my.ini、my.cnf)来更改。

    ②会话变量(@@session.)

    在每次建立一个新的连接的时候,由MySQL来初始化;

    MYSQL会将当前所有全局变量的值复制一份来做为会话变量(也就是说,如果在建立会话以后,没有手动更改过会话变量与全局变量的值,那所有这些变量的值都是一样的)。

    #全局变量与会话变量的区别:对全局变量的修改会影响到整个服务器,但是对会话变量的修改,只会影响到当前的会话。

    展开全文
  • mysql 存储过程 时间变量定义

    千次阅读 2021-01-19 00:47:45
    "云数据库RDS MySQL版","des":"云数据库RDS MySQLMySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的...
  • 一、MySQL变量定义mysql变量定义用declare来定义一局部变量mysql 存储过程变量定义与赋值操作,该变量的使用范围只能在begin...end 块中使用,变量必需定义在复合语句的开头,并且系在其它语句之前,expr为值...
  • MySQL存储过程变量定义

    千次阅读 2018-10-03 09:27:18
    mysql存储过程也可以定义自己的变量,那么MySQL存储过程如何定义变量呢? 要在存储过程中声明一个变量,可以使用DECLARE语句 DECLARE variable_name datatype(size) DEFAULT default_value; MySQL允许您使用单个...
  • MySQL中,可以使用DECLARE关键字来定义变量定义变量的基本语法如下: DECLARE var_name[,…] type [DEFAULT value] 其中,关键字DECLARE是用来声明变量的;参数var_name是变量的名称,可以同时定义多个变量;...
  • 全Sql语句创建 例如执行以上sql即可创建 2.Navicat中创建 第一步,函数右键 → 新建函数 第二步,填写存储过程名字,选择过程,点完成 第三步,定义存储过程 三、Mysql存储过程中输入参数 CREATE DEFINER=`root`@`%`...
  • mysql存储过程中declare 和set 定义变量的区别:->使用set 或者select 直接赋值,变量名以@开头例如: set @var=1;可以在会话的任何地方声明,作用域是整个会话,称为会话变量,也是全局变量。->以declare...
  • 下面小编就为大家带来一篇浅谈MySQL存储过程中declare和set定义变量的区别。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • 1.定义变量,赋值,... -- 如果proc_first存在就删除create procedure proc_first()-- 创建存储过程begin-- 定义变量DECLARE age INT;-- 赋值set age = 23;select age;end;-- 执行call proc_first;1.定义变量,赋...
  • -- Mysql 存储过程/*set @result = 0;create procedure login(-- 定义参数,有in、out、inout三种类型in user varchar(10),in pass varchar(10),out result int)begindeclare passd varchar(10);-- declare 声明临时...
  • 存储过程 1 什么是存储过程 1.存储过程,带有逻辑的sql语句 2.之前的sql没有条件判断,没有循环 3.存储过程带上流程控制语句(if while) 2 存储过程特点 1)执行效率非常快!存储过程是在数据库的服务器端...
  • 昨天我们讲了mysql存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程变量定义赋值操作哦。一、变量定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end块中使用...
  • MySql 储存过程 变量定义和赋值

    千次阅读 2020-09-30 10:36:19
    MySQL 5.0 版本开始支持存储过程存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。存储过程是为了完成特定功能的SQL语句集,经编译创建并保存在数据库中,用户可...
  • 当将一串逗号分隔的id(作为varchar)发送到MySQL存储过程时,我不能将该字符串用作IN子句的一部分,并返回正确的结果.字符串被截断为十进制,只使用第一个值.我以为我可以通过准备然后执行语句来解决这个问题,但这仍然只...
  • [转载]MySQL存储过程使用输出变量

    千次阅读 2021-01-18 18:53:07
    创建存储过程: DELIMITER $$ DROP PROCEDURE IF EXISTS `testINVarchar` $$ CREATE PROCEDURE `testINVarchar`(IN inTableName VARCHAR(128),OUT inNUM INT) BEGIN SET @tmpNUM = 0; SET @SQLStr=CONCAT('SELECT ...
  • drop PROCEDURE if exists my_procedure; create PROCEDURE my_procedure() BEGIN declare my_sqll varchar(500);... 您可能感兴趣的文章:mysql 存储过程变量定义与赋值操作mysql存储过程详解mysq
  • 变量类型 ...过程变量 BEGIN DECLARE a,b,c INT DEFAULT 0; #定义以及定义默认值 SET a = 100; #赋值 : 限于自身过程使用 SELECT a,b,c; END 会话变量 有效范围 : 全部会话内有效(包括子会话) 用cal...
  • mysql存储过程空值赋值变量的问题

    千次阅读 2019-09-03 16:06:29
    mysql存储过程,在赋值变量时,如果所赋值为空,则赋值失败,变量维持现状。 比如: my_loop : LOOP IF(逻辑判断) TEHN leave my_loop; END IF; select id into my_id from user limit 1; END LOOP; 假设第一...
  • mysql 存储过程 存储打印变量

    千次阅读 2020-09-29 15:44:28
    -- 定义循环条件 DECLARE flag INT DEFAULT 0; -- 保存表名 DECLARE tname VARCHAR(50); -- 查询数据库test中含有userId列的表,如果区分大小写使用binary COLUMN_NAME = 'userId' DECLARE result CURSOR FOR ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 134,195
精华内容 53,678
关键字:

mysql存储过程定义变量

mysql 订阅