存储过程 @与字符连接

Oracle中有一个伪列rownum,可以在生成查询结果表的时候生成一组递增的序列号。MySQL中没有这个伪列,但是有时候要用,可以用如下方法模拟生成一列自增序号。

select (@i:=@i+1) as rownum, agent_id, agent_name from user, (select @i:=0) as init;

select@变量 储存自增ID

INSERT INTO `operates` (`code`, `name`, `icon`, `remark`) VALUES ('transfer', '迁移', '', '');
SELECT @parentId := LAST_INSERT_ID();
INSERT INTO `menu_operates` (`menu_id`, `operates_id`) VALUES ('141',@parentId);

set @

set @month='2021-01';
select * from user where date_month=@month;
select * from admin where date_month=@month;

select @name := name, @number := number from my_student where id=1 limit 1;

存储过程循环变量与字符连接

mysql> DELIMITER $$
mysql> drop PROCEDURE sp_test_switch$$
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE PROCEDURE sp_test_switch()
    -> BEGIN
    ->  declare a int;
    ->  declare b varchar(5000);
    ->  set a=1;
    ->  set b='';
    ->  while a<10 do
    ->          set b = concat(b,',',a);
    ->          set a=a+1;
    ->  end while;
    ->  select b;
    -> END
    -> $$
Query OK, 0 rows affected (0.00 sec)

mysql> DELIMITER ;
mysql>
mysql> call sp_test_switch();
+--------------------+
| b                  |
+--------------------+
| ,1,2,3,4,5,6,7,8,9 |
+--------------------+
1 row in set (0.00 sec)
Query OK, 0 rows affected (0.00 sec)
mysql>

mysql存储过程的变量定义:declare和直接set @var什么区别?

我的理解是, declare定义的是局部变量, 只能用在存储过程或函数中, 其有效区间就是存储过程或函数中声明该变量的begin end区间.而@var属于用户变量(自己声明的), 其有效区间就是该session, 你既可以在存储过程或函数中使用, 也可以在自己写的SQL语句中使用.还有@不需要声明类型,declare必须指定类型

CREATE PROCEDURE sp_starnight_cbj() 
BEGIN
DECLARE A INT DEFAULT 1;
DECLARE B VARCHAR(5000) DEFAULT '';
WHILE A<10 DO
	SET B = CONCAT(B,',',A);
	SET A=A+1;
END WHILE;
SELECT B;
END; 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值