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)
 

最新文章

  1. spring boot1
  2. 对C#泛型实例化对像
  3. RecyclerView的坑
  4. 仿360手机卫士界面效果android版源码
  5. nginx配置文件的说明
  6. VIM中的正则表达式及替换命令
  7. 在SpringMVC框架下建立Web项目时web.xml到底该写些什么呢?
  8. 学习总结:工程管理与makefile
  9. SpringBoot整合Redis及Redis工具类撰写
  10. Spring基础系列-容器启动流程(1)
  11. python数据结构与算法第五天【顺序表】
  12. Java ME之Android开发从入门到精通
  13. 有关 PHP 的 10 道问题
  14. BZOJ4559 JLOI2016成绩比较(容斥原理+组合数学+斯特林数)
  15. python3学习笔记(8)_sorted
  16. 30 进程process
  17. DDL-数据类型
  18. Flex用HTTPService调用servlet返回中文乱码解决
  19. PAT 甲级 1104. Sum of Number Segments (20) 【数学】
  20. Java通过图片url地址获取图片base64位字符串的两种方式

热门文章

  1. pat解题报告【1082】
  2. vijos P1459车展
  3. poj--1753--Flip Game(dfs好题)
  4. leetcode数学相关
  5. Django 安装步骤
  6. TopK代码
  7. JQuery 动态创建表单,并自动提交
  8. JDBC的详细使用
  9. 努比亚(nubia) V18 NX612J 解锁BootLoader 并刷入recovery ROOT
  10. 书不在多,精读则灵 - Oracle入门书籍推荐