精华内容
下载资源
问答
  • mysql存储过程变量赋值
    2021-01-18 23:12:35

    # 使用的navicat  编辑的存储过程

    CREATE DEFINER=`root`@`localhost` PROCEDURE `insert_student_back`()

    BEGIN

    #定义max变量

    DECLARE max INT DEFAULT 0;

    select max(id) into max from student_back;

    #判断是不是空值 是空值就赋值为0

    if max is null then

    set max = 0;

    end if;

    #备份数据

    INSERT INTO student_back () SELECT * from student where id > max limit 10;

    select max(id) into max from student_register_back;

    #返回值

    select max;

    END

    #结束

    其他方法:

    -- 方式 1

    DECLARE cnt INT DEFAULT 0;

    select count(*) into cnt from test_tbl;

    select cnt;

    -- 方式 2

    set @cnt = (select count(*) from test_tbl);

    select @cnt;

    -- 方式 3

    select count(*) into @cnt1 from test_tbl;

    select @cnt1;

    -- 多个列的情况下似乎只能用 into 方式

    select max(status), avg(status) into @max, @avg from test_tbl;

    select @max, @avg;

    更多相关内容
  • 一、变量的定义 mysql中变量定义用declare来定义...二、mysql存储过程变量赋值 变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set来操作,可以是常量或表达式如果下 代码如下: set var_name= [,var_name expr]
  • MySQL变量赋值就一个坑。这个坑有两种填法。 第一种是众所周知的:set 变量名=值/赋值语句 第二种是:select … set 变量名 …; 或者 select … set 变量名; 第一种,我在网上看很多人说变量名前面要加@符合,但是...

    MySQL变量赋值就一个坑。这个坑有两种填法。
    第一种是众所周知的:set 变量名=值/赋值语句
    第二种是:select … into 变量名 …; 或者 select … into 变量名;

    第一种,我在网上看很多人说变量名前面要加@符合,但是实际上是不必要的,只有一些特殊情况是必须要@符合,大部分时候不加也不影响存储过程的使用的。
    例如:

    set g_grant_ex='gamedb.tb_exchange_';
    set @g_grant_ex='gamedb.tb_exchange_';
    /*这其实是一样的效果*/
    

    第二种,这个就更坑了。我之前看别人用的是云里雾里。后来动手试了几次才发现。。。。。。。蛮好用的~例子如下
    列如:

    1.select count(*) into g_err from information_schema.TABLES t where t.TABLE_SCHEMA='gamedb' and t.TABLE_NAME=concat('tb_recharge_',g_year);
    2.select count(*) from information_schema.TABLES t where t.TABLE_SCHEMA='gamedb' and t.TABLE_NAME=concat('tb_recharge_',g_year) into g_err;
    /*这两个效果也是一样的*/
    
    展开全文
  • 1.今天发现用游标建立的存储过程不循环,找了很长时间终于知道原因了解决:1.数据库字段类型是 decimal存储过程 declared 字段类型 也是decimal确定没问题2.declared 字段类型 后 定义默认值的时候,应加上小数位数。...

    1.今天发现用游标建立的存储过程不循环,找了很长时间终于知道原因了

    解决:

    1.

    数据库字段类型是 decimal

    存储过程 declared 字段类型 也是decimal

    确定没问题

    2.

    declared 字段类型 后 定义默认值的时候,应加上小数位数。

    比如数据库字段  小数位数是4位数 , 设置默认值就应该这么样(例:default 0.0000)

    3.如果前两步没问题,就来看看赋值问题

    我用的是into 局部变量赋值的方式,这里有个问题 赋值的时候局部变量名字不能于字段名重复.

    为了赋值方便 我使用了set 赋值方式

    代码如下:

    BEGIN

    -- 局部变量的定义 declare

    DECLARE meter_id BIGINT DEFAULT 0;-- 设备id

    DECLARE flow_now DECIMAL(18,4) DEFAULT 0.0000;-- 当天用电量

    DECLARE flow_before DECIMAL(18,4) DEFAULT 0.0000;-- 前一天用电量

    DECLARE build_id INT DEFAULT 0;-- 建筑id

    DECLARE room_id INT DEFAULT 0;-- 房间id

    DECLARE done INT DEFAULT 0; -- 控制游标结束

    DECLARE cur_meter CURSOR FOR

    SELECT energy.meter_info.hid ,energy.meter_info.buildid,energy.meter_info.consumer_id

    FROM energy.meter_info where 1=1 AND energy.meter_info.meter_type='6';-- 声明游标

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;-- 控制游标的结束

    -- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;-- 这把 游标 异常后 捕捉 并设置 循环使用 变量 id 为 null 跳出循环(控制游标结束与上一句一样)

    OPEN cur_meter;-- 开启游标

    REPEAT -- repeat循环

    FETCH cur_meter INTO meter_id,build_id,room_id;-- 把第一行记录写入变量里,游标也随着指向第一行

    IF NOT done THEN -- 判断循环是否结束

    -- 取当天的用电量

    SET flow_now = (SELECT energy.electric_data.elec

    FROM energy.electric_data

    WHERE 1=1 and date(energy.electric_data.sys_read_time) = curdate() and energy.electric_data.meter_id = meter_id);

    -- 取昨天用电量

    SET flow_before = (SELECT energy.electric_data.elec

    FROM energy.electric_data

    WHERE 1=1 and date(energy.electric_data.sys_read_time) = curdate()-1 and energy.electric_data.meter_id = meter_id);

    IF flow_now-flow_before > 0 THEN

    -- 插入到电表统计表中

    INSERT INTO energy.electric_data_total(energy.electric_data_total.meter_id,energy.electric_data_total.build_id,

    energy.electric_data_total.room_id,energy.electric_data_total.electric_flow,

    energy.electric_data_total.create_date,energy.electric_data_total.create_user)

    VALUES(meter_id,build_id,room_id,flow_now-flow_before,date(NOW()),'admin');

    END IF;

    END IF;

    UNTIL done END REPEAT; -- repeat循环结束

    CLOSE cur_meter;-- 注意,用完后必须关闭

    END

    另一种方式是给其加上函数 然后再赋值

    代码如下

    BEGIN

    -- 局部变量的定义 declare

    DECLARE meter_id BIGINT DEFAULT 0;-- 设备id

    DECLARE flow_now DECIMAL(18,4) DEFAULT 0.0000;-- 当天用电量

    DECLARE flow_before DECIMAL(18,4) DEFAULT 0.0000;-- 前一天用电量

    DECLARE build_id INT DEFAULT 0;-- 建筑id

    DECLARE room_id INT DEFAULT 0;-- 房间id

    DECLARE done INT DEFAULT 0; -- 控制游标结束

    DECLARE cur_meter CURSOR FOR

    SELECT energy.meter_info.hid ,energy.meter_info.buildid,energy.meter_info.consumer_id

    FROM energy.meter_info where 1=1 AND energy.meter_info.meter_type='6';-- 声明游标

    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;-- 控制游标的结束

    -- DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done = 1;-- 这把 游标 异常后 捕捉 并设置 循环使用 变量 id 为 null 跳出循环(控制游标结束与上一句一样)

    OPEN cur_meter;-- 开启游标

    REPEAT -- repeat循环

    FETCH cur_meter INTO meter_id,build_id,room_id;-- 把第一行记录写入变量里,游标也随着指向第一行

    IF NOT done THEN -- 判断循环是否结束

    -- 取当天的用电量

    SELECT max(energy.electric_data.elec) INTO flow_now

    FROM energy.electric_data

    WHERE 1=1 and date(energy.electric_data.sys_read_time) = curdate() and energy.electric_data.meter_id = meter_id;

    -- 取昨天用电量

    SELECT max(energy.electric_data.elec) INTO flow_before

    FROM energy.electric_data

    WHERE 1=1 and date(energy.electric_data.sys_read_time) = curdate()-1 and energy.electric_data.meter_id = meter_id;

    IF flow_now-flow_before > 0 THEN

    -- 插入到电表统计表中

    INSERT INTO energy.electric_data_total(energy.electric_data_total.meter_id,energy.electric_data_total.build_id,

    energy.electric_data_total.room_id,energy.electric_data_total.electric_flow,

    energy.electric_data_total.create_date,energy.electric_data_total.create_user)

    VALUES(meter_id,build_id,room_id,flow_now-flow_before,date(NOW()),'admin');

    END IF;

    END IF;

    UNTIL done END REPEAT; -- repeat循环结束

    CLOSE cur_meter;-- 注意,用完后必须关闭

    END

    展开全文
  • 昨天我们讲了mysql存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程变量的定义赋值操作哦。一、变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end块中使用...

    昨天我们讲了mysql存储过程创建修改与删除,下面我们这篇教程是讲关于mysql存储过程中变量的定义赋值操作哦。

    一、变量的定义 mysql中变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end

    块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时申明多个变量,如果需要,可以使用default赋默认值。

    定义一个变量语法如下:

    declare var_name[,...] type[default value]看一个变量定义实例

    declare last date;二、mysql存储过程变量赋值

    变量的赋值可直接赋值与查询赋值来操作,直接赋值可以用set来操作,可以是常量或表达式如果下

    set var_name= [,var_name expr]...给上面的last变量赋值方法如下

    set last = date_sub( current_date(),interval 1

    month);下面看通过查询给变量赋值,要求查询返回的结果必须为一行,具体操作如下

    select col into var_name[,...] table_expr我们来通过查询给v_pay赋值。

    create function get _cost(p_custid int,p_eff datetime)

    return decimal(5,2)

    deterministic

    reads sql data

    begin

    declare v_pay decimail(5,2);

    select ifnull( sum(pay.amount),0) into vpay from payment where

    pay.payd

    reutrn v_rent + v_over - v_pay;

    end $$

    好了,这篇简单的存储过程中变量的定义赋值教程就到这里了,下面我们会接着讲关于myql存储过程的条件的定义与处理。

    以下是其它网友的补充

    在MySQL的存储过程中,可以使用变量,它用于保存处理过程中的值。

    定义变量使用DECLARE语句,语法格式如下:

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

    其中,var_name为变量名称,type为MySQL支持的任何数据类型,可选项[DEFAULT

    value]为变量指定默认值。一次可以定义多个同类型的变量,各变量名称之间以逗号“,”隔开。

    定义与使用变量时需要注意以下几点:

    DECLARE语句必须用在DEGIN…END语句块中,并且必须出现在DEGIN…END语句块的最前面,即出现在其他语句之前。

    DECLARE定义的变量的作用范围仅限于DECLARE语句所在的DEGIN…END块内及嵌套在该块内的其他DEGIN…END块。

    ◆ 存储过程中的变量名不区分大小写。

    定义后的变量采用SET语句进行赋值,语法格式如下:

    SET var_name = expr [,var_name = expr] ...

    其中,var_name为变量名,expr为值或者返回值的表达式,可以使任何MySQL支持的返回值的表达式。一次可以为多个变量赋值,多个“变量名=值”对之间以逗号“,”隔开。

    例如:

    begin

    declare no varchar(20);

    declare title varchar(30);

    set no='101010',title='存储过程中定义变量与赋值';

    end

    提示:存储过程中所有的关键字也是不区分大小写的,如BEGIN可以写出begin。

    展开全文
  •  直接将表内内容赋值到指定变量当中 select name,bid into @a,@b from bank limit 1; 要注意一点就是变量名不能和字段名一致 存储过程 存储过程将一段通用的操作封装在一起 这样再不同平台都可以公用了 储存...
  • "云数据库RDS MySQL版","des":"云数据库RDS MySQLMySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的...
  • 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; 假设第一...
  • "云数据库RDS MySQL版","des":"云数据库RDS MySQLMySQL 是全球最受欢迎的开源数据库,阿里云MySQL版 通过深度的内核优化和独享实例提供稳定极致的数据库性能,同时灵活的部署架构及产品形态,可满足不同场景下的...
  • 使用SELECT …INTO语句为变量赋值MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给变量。SELECT …INTO语句的语法格式如下:SELECTcol_name[,...]...
  • 让我们创建一个存储过程-delimiter//createprocedurecheckingForNullDemo(Namevarchar(20))beginifNameisNULLORName=''thenselect'AdamSmith';elseselectName;endif;end//delimiter;情况1传递N...
  • mysql存储过程查询赋值数据库:mysql表1:CREATE TABLE t_test1 (test1 varchar(100) COLLATE utf8_bin DEFAULT NULL,test2 varchar(100) COLLATE utf8_bin DEFAULT NULL)表2:CREATE TABLE test2 (test varchar(100...
  • 本文为大家介绍mysql存储过程使用select ... into语句为变量赋值的范例,感兴趣的朋友可以参考下。在MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值给...
  • 1.定义变量赋值,... -- 如果proc_first存在就删除create procedure proc_first()-- 创建存储过程begin-- 定义变量DECLARE age INT;-- 赋值set age = 23;select age;end;-- 执行call proc_first;1.定义变量,赋...
  • MySQL存储过程和方法之变量赋值

    千次阅读 2013-12-15 20:24:04
    MySQL存储过程中,可以使用SELECT …INTO语句对变量进行赋值,该语句在数据库中进行查询,并将得到的结果赋值变量。SELECT …INTO语句的语法格式如下: SELECT col[,...] INTO var[,...] table  col...
  • mysql 存储过程变量的定义与赋值操作一、变量的定义mysql变量定义用declare来定义一局部变量,该变量的使用范围只能在begin...end 块中使用,变量必须定义在复合语句的开头,并且是在其它语句之前,也可以同时...
  • [color=red]注:查询可以使用游标获取单个或一组数据,但有时候返回值就只有一个,那么我们通常使用查询(SELECT ...INTO ...FROM )赋值方法.[/color] 原始SQL语句: [code="sql"] DROP PROCEDURE IF ...
  • 主要介绍了mysql存储过程之创建(CREATE PROCEDURE)和调用(CALL)及变量创建(DECLARE)和赋值(SET)操作方法,结合实例形式较为详细的分析了mysql存储过程创建、调用及变量创建、赋值具体原理、操作技巧与相关...
  • MySQL变量定义和赋值是我们经常会遇到的问题,下面就为您接受如何在存储过程MySQL变量定义和赋值,希望对您学习MySQL变量定义方面能有所启迪。一、MySQL变量的定义mysql变量定义用declare来定义一局部变量mysql ...
  • 本篇文章是对mysql存储过程在动态SQL内获取返回值进行了详细的分析介绍,需要的朋友参考下
  • mysql存储过程中,使用SELECT给变量赋值的方式,貌似不支持返回值! 知道的小伙伴们,不吝赐教,着急 看图: #4.创建带inout模式参数的存储过程 #案例1:传入number1、number2、number3这3个值,最终这3个数都...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 47,237
精华内容 18,894
关键字:

mysql存储过程变量赋值

mysql 订阅