convert Cast函数
两者具体的语法如下:
Cast(value as type); Convert(value ,type);
type不是都可以滴,可以转换的type如下:
二进制,同带binary前缀的效果 : BINARY
字符型,可带参数 : CHAR()
日期 : DATE
时间: TIME
日期时间型 : DATETIME
浮点数 : DECIMAL
整数 : SIGNED
无符号整数 : UNSIGNED
存储过程写法实例
在mysql客户端定义存储过程的时候使用delimiter命令来把语句定界符从;变为//。
当使用delimiter命令时,你应该避免使用反斜杠(‘"’)字符,因为那是MySQL的转义字符。
delimiter //
//
如果需要传递参数 则如此
- <span style="font-size:10px;font-weight: normal;">create procedure test3(IN id int, OUT pname varchar(10))
- begin
- select user_name into pname from test where id = id;
- end </span>
- delimiter //
- drop PROCEDURE if EXISTS update_error_stock;
- CREATE PROCEDURE update_error_stock()
- BEGIN
- /*游标取完后的标识变量done_cursor置为1 */
- DECLARE done_cursor INT DEFAULT 0 ;
- DECLARE goods_id_temp, order_sum_number,stock_sum_number INT;
- /*所有已经付款的商品的id号*/
- DECLARE cur1 CURSOR FOR (SELECT distinct og.goods_id FROM ecs_order_info as of inner join ecs_order_goods as og on of.order_id =og.order_id where of.pay_status=2);
- /*游标声明必须在HANDLER之前 */
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_cursor=1;
- /*mysql中变量没有事前申明 使用set 可以用:= = 使用 select赋值必须 := convert((500-@order_sum_number),SIGNED); */
- /*循环取值 更新库存*/
- OPEN cur1;
- REPEAT
- FETCH cur1 INTO goods_id_temp;
- SELECT sum(og.goods_number) into order_sum_number FROM ecs_order_info as of inner join ecs_order_goods as og on of.order_id =og.order_id where of.pay_status=2 and og.goods_id=goods_id_temp;
- SELECT convert((500-order_sum_number),SIGNED) INTO stock_sum_number ;
- update ecs_goods set goods_number=stock_sum_number where goods_id=goods_id_temp and goods_number > 500;
- set order_sum_number=0;
- set stock_sum_number=0;
- UNTIL done_cursor END REPEAT;
- CLOSE cur1;
- END
- //
- call update_error_stock;
- PROCEDURE 2 来自 mysql 手册
- drop PROCEDURE if EXISTS curdemo;
- CREATE PROCEDURE curdemo()
- BEGIN
- DECLARE done INT DEFAULT 0;
- DECLARE a CHAR(16);
- DECLARE b,c INT;
- DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;
- DECLARE cur2 CURSOR FOR SELECT i FROM t2;
- DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
- OPEN cur1;
- OPEN cur2;
- REPEAT
- FETCH cur1 INTO a, b;
- FETCH cur2 INTO c;
- IF NOT done THEN
- IF b < c THEN
- INSERT INTO t3 VALUES (a,b);
- ELSE
- INSERT INTO t3 VALUES (a,c);
- END IF;
- END IF;
- UNTIL done END REPEAT;
- CLOSE cur1;
- CLOSE cur2;
- END;
- call curdemo;
mysql 变量定义 (转)
在select中,发现有一个用户变量,如果没有定义,那么就会初始化。
select子句原来的方式根本不受到影响。只是增加了用户变量。所以,还是按照原来的方式使用select子句。那么像:select sum(amount) from penalties。增加变量就成了:select @VAR:=sum(amount) from penalties。
将sum(amount)的结果赋给变量@VAR:。变量前面有select,那用户么就是显示该变量了。
mysql变量的术语分类:
1.用户变量:以"@"开始,形式为"@变量名"
用户变量跟mysql客户端是绑定的,设置的变量,只对当前用户使用的客户端生效
2.全局变量:定义时,以如下两种形式出现,set GLOBAL 变量名 或者 set @@global.变量名
3.会话变量:只对连接的客户端有效。
4.局部变量:作用范围在begin到end语句块之间。在该语句块里设置的变量
declare语句专门用于定义局部变量。set语句是设置不同类型的变量,包括会话变量和全局变量
原文地址:http://blog.csdn.net/super_ufo/article/details/11215795
相关文章
- mysql slave不能同步Last_SQL_Error Error Duplicate entry
- MySQL 提示Incorrect key file for table 'xx'; try to 出错无法打开
- MySQL Got error 28 from storage engine 解决办法
- 高可用的Mysql双机热备(Mysql_HA)
- mysql 对数据表的结构和数据进行复制
- mysql数据库表的错误 got error 28 from storage engine
- MySQL存储过程中使用动态行转列
- 查看运行MySQL中的语句(查询正在执行的sql)
- mysql安装图解 mysql图文安装教程(详细说明)
- Can't connect to MySQL server on localhost (10061)解决方法