mysql 流程控制语句

  1. /*  
  2. 该代码是创建了一个名叫"p4"的存储过程并设置了s1,s2,s3两个int型一个varchar型参数,还可以是其他数据类型,内部创建了x1,x2两个变量  
  3.   
  4. DELIMITER是修改分隔符的  
  5. DELIMITER $$的意思是把默认分隔符";"换成"$$",这样分段写的存储过程就能整个被执行,而不是被当成多条sql语句单独执行  
  6. 创建完过程再将分隔符改回成";"  
  7.   
  8. 两种创建变量并赋值的方式  
  9. SET @变量名 = 值;  
  10. SELECT 值 INTO @变量名;  
  11. 使用变量前必须先运行该变量赋值语句  
  12. 过程内部还可以通过 "DECLARE 变量名 类型(字符串型要加范围) DEFAULT 值;" 来创建变量,但如此创建的变量只能在该过程内部访问  
  13.   
  14. 存储过程只有三种类型参数 IN,OUT,INOUT  
  15. 调用过程时过程有几个参数传几个参数,只是IN型的参数可以传的是变量,可以是常量,而OUT和INOUT型的参数传的必须是变量  
  16. 传给out,inout参数的变量值会随着在过程中改变在外部也改变,而给in参数的变量外部值则不受过程内变量值改变的影响  
  17. */  
  18. DELIMITER $$  
  19.   
  20. DROP PROCEDURE IF EXISTS `p4`$$  
  21.   
  22. CREATE PROCEDURE `p4`(IN s1 INT,OUT s2 INT,INOUT s3 VARCHAR(10))  
  23. BEGIN  
  24. DECLARE x1 VARCHAR(10) DEFAULT 'this is x1';   
  25. DECLARE x2 VARCHAR(10) DEFAULT 'this is x2';   
  26. SET s1 = 11;  
  27. SET s2 = 22;  
  28. SET s3 = 'iss3';  
  29.   
  30. /*  
  31. if语法  
  32. */  
  33. IF s1 = 11 AND s2 = 12 THEN  
  34. SELECT s1,s2;  
  35. END IF;  
  36.   
  37. IF s3 = 's3' OR s1 = s2 THEN  
  38. SELECT s3;  
  39. ELSE   
  40. SELECT s1,s2,s3;  
  41. END IF;  
  42.   
  43. /*  
  44. case语法  
  45. */  
  46. CASE s3  
  47. WHEN 's1' THEN  
  48. SELECT 'this is s1';  
  49. WHEN 's2' THEN  
  50. SELECT 'this is s2';  
  51. ELSE  
  52. SELECT 'this is s3';  
  53. END CASE;  
  54.   
  55. /*  
  56. while循环  
  57. */  
  58. WHILE s1>1 DO  
  59. SET s1=s1-1;  
  60. END WHILE;   
  61. SELECT s1;  
  62.   
  63. /*  
  64. repeat循环语句  
  65. 与while不同的是while满足条件就执行,repeat始终执行直到满足条件终止  
  66. */  
  67. REPEAT    
  68. SET s1 = s1-1;   
  69. UNTIL s1=1    
  70. END REPEAT;   
  71. SELECT s1;  
  72.   
  73.   
  74. /*  
  75. LOOP循环  
  76. LOOP没有循环条件,会不停的循环直到遇到 "LEAVE ZiDingYi;" "ZiDingYi"是自定义的LOOP标记  
  77. */  
  78. ZiDingYi:LOOP  
  79. SET s1 = s1+1;  
  80. IF s1 = 5 THEN  
  81. LEAVE ZiDingYi;  
  82. END IF;  
  83. END LOOP;  
  84. SELECT s1;  
  85.   
  86.   
  87. END$$  
  88.   
  89. DELIMITER ;  
  90.   
  91.   
  92. SET @p_in=1;   
  93. SET @p_out=2;  
  94. SET @p_inout = 's3';  
  95. SELECT 'Hello World1' INTO @p_4;  
  96.   
  97. /*调用存储过程*/  
  98. CALL p4(@p_in,@p_out,@p_inout);  
  99. SELECT @p_in,@p_out,@p_inout,@p_4;  
  100.   
  101.   
  102. /*  
  103. 存储过程如果只有一个语句则语句不用 begin...end包围  
  104. 存储过程中可以直接使用外部定义的变量  
  105. 存储过程中用setselect定义的变量就是全局的,执行该过程后内部用setselect定义的变量外部可以访问,其他过程也可以直接使用  
  106. */  
  107. CREATE PROCEDURE p1()   SET @var='p1';    
  108. CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@var);    
  109. CALL p1();    
  110. CALL p2();   
  111. SELECT @var;  
  112.   
  113. CREATE PROCEDURE p3() SELECT CONCAT(@p3_var,' World');  
  114. SET @p3_var='Hello';  
  115. CALL p3();  
  116.   
  117. /*删除存储过程*/  
  118. DROP PROCEDURE p4;  
  119. /*或者*/  
  120. DROP PROCEDURE IF EXISTS `p4`  
  121.   
  122. /*查看该数据库下有哪些存储过程 test为数据库名*/  
  123. SELECT NAME FROM mysql.proc WHERE db='test';  
  124. /*或者*/  
  125. SHOW PROCEDURE STATUS WHERE db='test';  
  126.   
  127. /*查看存储过程详细信息,包括创建语句*/  
  128. SHOW CREATE PROCEDURE p4;  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值