主页 > 运维运营 > Mysql >
发布时间:2015-05-22 作者:网络 阅读:295次
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 //
//

 

 

如果需要传递参数 则如此   

 

[sql] view plaincopy
 
  1. <span style="font-size:10px;font-weight: normal;">create procedure test3(IN  id intOUT pname varchar(10))   
  2. begin     
  3.     select user_name into pname from test where id = id;   
  4. end </span>  

 

[sql] view plaincopy
 
  1. delimiter //  
  2. drop PROCEDURE if EXISTS update_error_stock;  
  3. CREATE PROCEDURE update_error_stock()  
  4. BEGIN   
  5.   /*游标取完后的标识变量done_cursor置为1 */   
  6.   DECLARE done_cursor INT DEFAULT 0 ;  
  7.   DECLARE goods_id_temp, order_sum_number,stock_sum_number INT;  
  8.   /*所有已经付款的商品的id号*/  
  9.     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);  
  10.     
  11.   /*游标声明必须在HANDLER之前 */  
  12.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done_cursor=1;  
  13.   
  14.         /*mysql中变量没有事前申明 使用set 可以用:= = 使用 select赋值必须 := convert((500-@order_sum_number),SIGNED);   */  
  15.         /*循环取值 更新库存*/  
  16.         OPEN cur1;   
  17.         REPEAT    
  18.             FETCH cur1 INTO goods_id_temp;    
  19.       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;  
  20.   
  21.       SELECT convert((500-order_sum_number),SIGNED) INTO  stock_sum_number ;  
  22.   
  23.             update ecs_goods set goods_number=stock_sum_number where goods_id=goods_id_temp and goods_number > 500;  
  24.   
  25.       set order_sum_number=0;  
  26.       set stock_sum_number=0;  
  27.         UNTIL done_cursor  END REPEAT;   
  28.           
  29.         CLOSE cur1;   
  30. END  
  31. //  
  32. call update_error_stock;  


 

 

 

[sql] view plaincopy
 
  1. PROCEDURE 2 来自 mysql 手册  
[sql] view plaincopy
 
  1. drop PROCEDURE if EXISTS curdemo;  
  2. CREATE PROCEDURE curdemo()  
  3. BEGIN  
  4.   DECLARE done INT DEFAULT 0;  
  5.   DECLARE a CHAR(16);  
  6.   DECLARE b,c INT;  
  7.   DECLARE cur1 CURSOR FOR SELECT id,data FROM t1;  
  8.   DECLARE cur2 CURSOR FOR SELECT i FROM t2;  
  9.   DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;  
  10.   
  11.   
  12.   OPEN cur1;  
  13.   OPEN cur2;  
  14.   
  15.   
  16.   REPEAT  
  17.     FETCH cur1 INTO a, b;  
  18.     FETCH cur2 INTO c;  
  19.     IF NOT done THEN  
  20.        IF b < c THEN  
  21.           INSERT INTO t3 VALUES (a,b);  
  22.        ELSE  
  23.           INSERT INTO t3 VALUES (a,c);  
  24.        END IF;  
  25.     END IF;  
  26.   UNTIL done END REPEAT;  
  27.   
  28.   
  29.   CLOSE cur1;  
  30.   CLOSE cur2;  
  31. END;  
  32.   
  33.   
  34. 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

 

关键字词: