• MySQL 存储过程的异常处理


    mysql>
    mysql> delimiter $$
    mysql>
    mysql> CREATE PROCEDURE myProc
        ->     (p_first_name          VARCHAR(30),
        ->       p_last_name           VARCHAR(30),
        ->       p_city                VARCHAR(30),
        ->       p_description         VARCHAR(30),
        ->       OUT p_sqlcode         INT,
        ->       OUT p_status_message  VARCHAR(100))
        -> BEGIN
        ->
        -> /* START Declare Conditions */
        ->
        ->   DECLARE duplicate_key CONDITION FOR 1062;
        ->   DECLARE foreign_key_violated CONDITION FOR 1216;
        ->
        -> /* END Declare Conditions */
        ->
        -> /* START Declare variables and cursors */
        ->
        ->      DECLARE l_manager_id       INT;
        ->
        ->      DECLARE csr_mgr_id CURSOR FOR
        ->       SELECT id
        ->         FROM employee
        ->        WHERE first_name=p_first_name
        ->              AND last_name=p_last_name;
        ->
        -> /* END Declare variables and cursors */
        ->
        -> /* START Declare Exception Handlers */
        ->
        ->   DECLARE CONTINUE HANDLER FOR duplicate_key
        ->     BEGIN
        ->       SET p_sqlcode=1052;
        ->       SET p_status_message='Duplicate key error';
        ->     END;
        ->
        ->   DECLARE CONTINUE HANDLER FOR foreign_key_violated
        ->     BEGIN
        ->       SET p_sqlcode=1216;
        ->       SET p_status_message='Foreign key violated';
        ->     END;
        ->
        ->   DECLARE CONTINUE HANDLER FOR not FOUND
        ->     BEGIN
        ->       SET p_sqlcode=1329;
        ->       SET p_status_message='No record found';
        ->     END;
        ->
        -> /* END Declare Exception Handlers */
        ->
        -> /* START Execution */
        ->
        ->   SET p_sqlcode=0;
        ->   OPEN csr_mgr_id;
        ->   FETCH csr_mgr_id INTO l_manager_id;
        ->
        ->   IF p_sqlcode<>0 THEN           /* Failed to get manager id*/
        ->     SET p_status_message=CONCAT(p_status_message,' when fetching manager id');
        ->   ELSE
        ->     INSERT INTO employee (first_name,id,city)
        ->     VALUES(p_first_name,l_manager_id,p_city);
        ->
        ->     IF p_sqlcode<>0 THEN     /* Failed to insert new department */
        ->       SET p_status_message=CONCAT(p_status_message,
        ->                            ' when inserting new department');
        ->     END IF;
        ->   END IF;
        ->
        ->   CLOSE csr_mgr_id;
        ->
        -> /* END Execution */
        ->
        -> END$$
    Query OK, 0 rows affected (0.02 sec)
     
    mysql>
    mysql> delimiter ;
    mysql> set @myCode = 0;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql> set @myMessage = 0;
    Query OK, 0 rows affected (0.00 sec)
     
    mysql>
    mysql> call myProc('Jason','Martin','New City','New Description',@myCode,@myMessage);
    Query OK, 1 row affected (0.00 sec)
     
    mysql>
    mysql> select @myCode, @myMessage;
    +---------+------------+
    | @myCode | @myMessage |
    +---------+------------+
    | 0       | NULL       |
    +---------+------------+
    1 row in set (0.00 sec)
     
    mysql>
    mysql> drop procedure myProc;
    Query OK, 0 rows affected (0.00 sec)
     
  • 相关阅读:
    php中运算符的分类及注意事项
    ecshopv3.6安装
    phpstudy多站点配置教程
    织梦dedecms出现DedeCMS Error: (PHP 5.3 and above) Please set 'request_order' ini value to i解决办法
    thinkphp3.2批量删除功能
    怎么使用阿里图标库
    人人网,微博,QQ空间,朋友圈,常用API调用实现方法
    ueditor注意事项
    大图在小于自身的div中,水平居中
    thinkphp3.2 实现分页功能
  • 原文地址:https://www.cnblogs.com/seasonzone/p/4794945.html
Copyright © 2020-2023  润新知