关于MySQL存储进程非凡处理的某个感受,MySql中的存款和储蓄进度简介

DROP PROCEDURE IF EXISTS `SP_MODEL`;

至于MySQL存款和储蓄进度分外处理的少数经验,mysql存款和储蓄进程

DROP PROCEDURE IF EXISTS `SP_MODEL`;

DELIMITER ;;
CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)
BEGIN
/**********存款和储蓄进度模版,结合了·重回自定义错误信息·错误退出··事物回滚·的效益***********/
DECLARE V_TEST INT DEFAULT 0;

DECLARE V_ERR_NO INT DEFAULT 0;
DECLARE V_ERR_MSG VA昂CoraCHA奥迪Q3(100) DEFAULT ‘执行成功’;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET
V_ERR_NO=1;

— CREATE TABLE `test_error` (
— `a` int(11) NOT NULL,
— `b` int(11) DEFAULT NULL,
— PRIMARY KEY (`a`)
— ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— TRUNCATE TABLE TEST_ERROR;
— CALL SP_MODEL(1);
— SELECT * FROM TEST_ERROR;

START TRANSACTION;

Label:– 执行进度中冒出错误则跳出此Label
BEGIN

IF V_TYPE=1 THEN
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);

IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’您已经插过啊,别再重复插~’;
— LEAVE Label;
END IF;

SET V_TEST=1;

INSERT INTO TEST_ERROR(a,b) VALUES(3,’a’);
IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’尺寸不对,插不进入~’;
LEAVE Label;
END IF;

关于MySQL存储进程非凡处理的某个感受,MySql中的存款和储蓄进度简介。INSERT INTO TEST_ERROR(a,b) VALUES(4,1);

SET V_TEST=2;

ELSE
SET V_ERR_MSG=’传入参数V_TYPE不正确’;
SET V_ERR_NO=一; — 直接设置此变量值为一,主动抛出万分
LEAVE Label;
END IF;

END Label;

IF V_ERR_NO=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

SELECT V_ERR_NO AS ERR_NO,V_ERR_MSG AS ERR_MSG, V_TEST AS TEST;
— 重返执行结果
END

;;

DELIMITER ;

DROP PROCEDURE IF EXISTS `997755.com澳门葡京,SP_MODEL`; DELIMITER ;; CREATE PROCEDURE
`SP_MODEL`(IN V_TYPE INT) BEGIN /*********…

DROP PROCEDURE IF EXISTS `SP_MODEL`;

MySql官方手册学习笔记3—MySql中的存款和储蓄进度简介

DELIMITER ;;
CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)
BEGIN
/**********存储进度模版,结合了·重临自定义错误信息·错误退出··事物回滚·的成效***********/
DECLARE V_TEST INT DEFAULT 0;

DELIMITER ;;
CREATE PROCEDURE `SP_MODEL`(IN V_TYPE INT)
BEGIN
/**********存款和储蓄过程模版,结合了·再次来到自定义错误音讯·错误退出··事物回滚·的效果***********/
DECLARE V_TEST INT DEFAULT 0;

 

DECLARE V_ERR_NO INT DEFAULT 0;
DECLARE V_ERR_MSG VACRUISERCHAHaval(100) DEFAULT ‘执行成功’;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET
V_ERR_NO=1;

DECLARE V_ERR_NO INT DEFAULT 0;
DECLARE V_ERR_MSG VAPRADOCHA奥迪Q3(100) DEFAULT ‘执行成功’;
DECLARE CONTINUE HANDLER FOR SQLEXCEPTION,SQLWARNING,NOT FOUND SET
V_ERR_NO=1;

相关链接:

— CREATE TABLE `test_error` (
— `a` int(11) NOT NULL,
— `b` int(11) DEFAULT NULL,
— PRIMARY KEY (`a`)
— ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

— CREATE TABLE `test_error` (
— `a` int(11) NOT NULL,
— `b` int(11) DEFAULT NULL,
— PRIMARY KEY (`a`)
— ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

MySql官方手册学习笔记一—MySql简单上手

— TRUNCATE TABLE TEST_ERROR;
— CALL SP_MODEL(1);
— SELECT * FROM TEST_ERROR;

— TRUNCATE TABLE TEST_ERROR;
— CALL SP_MODEL(1);
— SELECT * FROM TEST_ERROR;

START TRANSACTION;

START TRANSACTION;

MySql官方手册学习笔记贰—MySql的混淆查询和正则表明式

Label:– 执行进度中出现错误则跳出此Label
BEGIN

Label:– 执行进度中冒出错误则跳出此Label
BEGIN

IF V_TYPE=1 THEN
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);

IF V_TYPE=1 THEN
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);
INSERT INTO TEST_ERROR(a,b) VALUES(1,1);

 

IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’您已经插过啊,别再重复插~’;
— LEAVE Label;
END IF;

IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’您曾经插过啊,别再重复插~’;
— LEAVE Label;
END IF;

SELECT INTO

SET V_TEST=1;

SET V_TEST=1;

  www.2cto.com  

INSERT INTO TEST_ERROR(a,b) VALUES(3,’a’);
IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’尺寸不对,插不进入~’;
LEAVE Label;
END IF;

INSERT INTO TEST_ERROR(a,b) VALUES(3,’a’);
IF V_ERR_NO=1 THEN
SET V_ERR_MSG=’尺寸不对,插不进去~’;
LEAVE Label;
END IF;

CREATE PROCEDURE sp一 (x VA奥德赛CHA宝马X5(五))    //成立储存进程

INSERT INTO TEST_ERROR(a,b) VALUES(4,1);

INSERT INTO TEST_ERROR(a,b) VALUES(4,1);

 

SET V_TEST=2;

SET V_TEST=2;

  BEGIN

ELSE
SET V_ERR_MSG=’传入参数V_TYPE不正确’;
SET V_ERR_NO=1; — 直接设置此变量值为一,主动抛出尤其
LEAVE Label;
END IF;

ELSE
SET V_ERR_MSG=’传入参数V_TYPE不正确’;
SET V_ERR_NO=一; — 直接设置此变量值为1,主动抛出尤其
LEAVE Label;
END IF;

 

END Label;

END Label;

    DECLARE xname VA奥德赛CHASportage(5) DEFAULT ‘bob’;      //注解局地变量

IF V_ERR_NO=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

IF V_ERR_NO=1 THEN
ROLLBACK;
ELSE
COMMIT;
END IF;

 

SELECT V_ERR_NO AS ERR_NO,V_ERR_MSG AS ERR_MSG, V_TEST AS TEST;
— 再次回到执行结果
END

SELECT V_ERR_NO AS ERR_NO,V_ERR_MSG AS ERR_MSG, V_TEST AS TEST;
— 重临执行结果
END

    DECLARE newname VARCHAR(5);

;;

;;

 

DELIMITER ;

DELIMITER ;

    DECLARE xid INT;

 

    SELECT xname,id INTO newname,xid      //将查到的属性值存入变量中

 

      FROM table1 WHERE xname = xname;

 

    SELECT newname;

 

  END;

 

变量名不可能与列名一样,当以此程序被调用的时候,无论table.xname列的值是怎么,变量newname将重回值‘bob’。

 

HANDLER

 

mysql> CREATE TABLE test.t (s1 int,primary key (s1));

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> delimiter //  //将定界符“;”改为“//”,因为程序中须求选用“;”。

  www.2cto.com  

mysql> CREATE PROCEDURE handlerdemo ()

 

    -> BEGIN

 

    ->   DECLARE insertErr CONDITION FOR SQLSTATE ‘23000’;
 //声明CONDITION

 

    ->   DECLARE CONTINUE HANDLER FOR insertErr SET @x2 =
1;//声明HANDLER

 

    ->   SET @x = 一;  //为部分变量赋值

 

    ->   INSERT INTO test.t VALUES (1);

 

    ->   SET @x = 2;

 

    ->   INSERT INTO test.t VALUES (1);

 

    ->   SET @x = 3;

 

    -> END;

 

    -> //

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> CALL handlerdemo()//

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> SELECT @x//

 

    +——+

 

    | @x   |

 

    +——+

 

    | 3    |

 

    +——+

 

    1 row in set (0.00 sec)

 

注意到,@x是三,那申明MySQL被实践到程序的结尾。假如DECLARE CONTINUE
HANDLECR-V FO路虎极光 insertErr SET @x二 = 壹; 那一行不在,第三个INSEGL450T因POdysseyIMARY
KEY强制而破产未来,MySQL也许已经应用 暗中认可(EXIT)路径,并且SELECT
@x恐怕曾经回来2。

  www.2cto.com  

CURSOR

 

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 test.t1;

 

  DECLARE cur2 CURSOR FOR SELECT i FROM test.t2;

 

  DECLARE CONTINUE HANDLER FOR SQLSTATE ‘02000’ SET done = 1;

 

  OPEN cur一; //使用前先张开游标

 

  OPEN cur2;

 

  REPEAT

 

    FETCH cur1 INTO a, b;  

 

    FETCH cur2 INTO c;

 

    IF NOT done THEN

 

       IF b < c THEN

 

          INSERT INTO test.t3 VALUES (a,b);

 

       ELSE

 

          INSERT INTO test.t3 VALUES (a,c);

 

       END IF;

 

    END IF;

 

  UNTIL done END REPEAT;

 

  CLOSE cur1;

 

  CLOSE cur2;

 

END

 

CASE

 

 CASE case_value

 

    WHEN when_value THEN statement_list

 

    [WHEN when_value THEN statement_list] …

 

    [ELSE statement_list]

 

END CASE

 

Or:

 

CASE

 

    WHEN search_condition THEN statement_list

 

    [WHEN search_condition THEN statement_list] …

 

    [ELSE statement_list]

 

END CASE

  www.2cto.com  

储存程序的CASE语句完毕二个繁杂的标准构造。假诺search_condition
求值为真,相应的SQL被实施。借使未有检索条件十二分,在ELSE子句里的话语被执行。

 

 LEAVE

 

 LEAVE label

 

本条讲话被用来退出别的被标明的流水生产线控制构造。它和BEGIN …
END或循环1起被使用。

 

 ITERATE

 

 ITERATE label

  www.2cto.com  

ITERATE只好够出现在LOOP, REPEAT,
和WHILE语句内。ITERATE意思为:“再一次循环。”

 

例如:

 

CREATE PROCEDURE doiterate(p1 INT)

 

BEGIN

 

  label1: LOOP

 

    SET p1 = p1 + 1;

 

    IF p1 < 10 THEN ITERATE label1; END IF;

 

    LEAVE label1;

 

  END LOOP label1;

 

  SET @x = p1;

 

END

 

REPEAT

 

mysql> delimiter //

  www.2cto.com  

mysql> CREATE PROCEDURE dorepeat(p1 INT)

 

    -> BEGIN

 

    ->   SET @x = 0;

 

    ->   REPEAT SET @x = @x + 1; UNTIL @x > p1 END REPEAT;

 

    -> END

 

    -> //

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> CALL dorepeat(1000)//

 

Query OK, 0 rows affected (0.00 sec)

 

mysql> SELECT @x//

  www.2cto.com  

+——+

 

| @x   |

 

+——+

 

| 1001 |

 

+——+

 

1 row in set (0.00 sec)

 

WHILE

 

CREATE PROCEDURE dowhile()

 

BEGIN

 

  DECLARE v1 INT DEFAULT 5;

 

  WHILE v1 > 0 DO

    …

 

    SET v1 = v1 – 1;

 

  END WHILE;

 

EN

相关链接: MySql官方手册学习笔记1MySql简易上手
MySql官…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

*
*
Website