• 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 存储过程中用set和select定义的变量就是全局的,执行该过程后内部用set和select定义的变量外部可以访问,其他过程也可以直接使用
    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;
  • 相关阅读:
    [IOS] iphone开发之UITableView之UITableViewCell [待续中。。。]
    人生需有三心境,你有吗?
    iPad iPhone程序增加启动画面
    [转载]IOS学习之UIApplication深入学习
    [IOS] iphone开发之[美化按钮]
    程序中调用Safari
    ios编程:iPhone Howto:给UIView拍照
    IOSAPNS 消息推送实践
    ios 设备方向判断
    [IOS]iphone开发之横屏与竖屏在不同视图之间的切换
  • 原文地址:https://www.cnblogs.com/libin6505/p/7693445.html
Copyright © 2020-2023  润新知