• mysql教程
  • Linux和windows下用mysql c++ library操作Mysql数据库
  • mysql 5.7下载安装配置详细教程
  • Python的MySQLdb模块安装
  • mysql jdbc连接mysql数据库步骤及常见参数详解
  • Win7 64位下mysql 下载、安装与配置图文教程
  • mysql update语句的用法详解
  • mysql 存储过程实例和基本语法
  • MySQL Workbench的下载安装与使用教程
  • mysql安装图解
  • mysql 命令大全及导入导出表结构或数据
  • mysql数据库下载安装教程和使用技巧
  • mysql中如何查看最大连接数(max_connections)和修改最大连接数
  • 在 linux下输入"mysql"命令,进入mysql命令行,但出现“Can't connetc to local MySQL server thuough socket /var/lib/mysql/mysql.sock
  • Mysql查询错误:ERROR:no query specified原因
  • MySQL 重装MySQL后, mysql服务无法启动
  • php安装完成后如何添加mysql扩展
  • 为什么用linux安装盘安装了mysql后,启动mysql,提示找不到mysql.sock文件?
  • mysql中查询当前正在运行的SQL语句并找出mysql中运行慢的sql语句
  • 請教,在redhat linux7.2+mysql 中,系統提示mysql已啟動,網頁卻不能訪問mysql?
  • Myeclipse中自带Tomcat的JDBC连接池配置(mysql和mssql)
  • centos安装mysql,连接时'Can't connect to local MySQL server through socket '/tmp/mysql
  • php中内置的mysql数据库连接驱动mysqlnd简介及mysqlnd的配置安装方式
  • 求解释: useradd -g mysql mysql -d /home/mysql -s /sbin/nologin
  • VS2012+MySQL+SilverLight5的MVVM开发模式介绍
  • 在Linux内安装了Mysql,无法进入Mysql.
  • MySQL索引基本知识
  • 怎样在linux终端输入mysql直接进入mysql?
  • Mysql设置查询条件(where)查询字段为NULL
  • c++中关于#include <mysql/mysql.h>的问题?
  • mysql中字符串和时间互相转换的方法(自动转换及DATE_FORMAT函数)
  • mysql -u root mysql 怎么解释
  • Mysql索引类型:B-Tree索引介绍
  • mm.mysql那里可以下载?www.mysql.com根本下载不了。谢谢了
  •  
    当前位置:  数据库>mysql

    mysql 存储过程实例和基本语法

     
    分享到:
        发布时间:2017-2-22  


        本文导语: mysql 存储过程实例和基本语法mysql 存储过程实例&nb...

    mysql 存储过程实例和基本语法


    mysql 存储过程实例                                                   


    DELIMITER $$ 
    DROP PROCEDURE IF EXISTS getUserInfo $$
    CREATE PROCEDURE getUserInfo(in date_day datetime)
    -- 
    -- 实例
    -- 存储过程名为:getUserInfo
    -- 参数为:date_day日期格式:2008-03-08
    --
        BEGIN
    declare _userName varchar(12); -- 用户名
    declare _chinese int ; -- 语文
    declare _math int ;    -- 数学
    declare done int;
    -- 定义游标
    DECLARE rs_cursor CURSOR FOR SELECT username,chinese,math from userInfo where datediff(createDate, date_day)=0;
    DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
    -- 获取昨天的日期
    if date_day is null then
       set date_day = date_add(now(),interval -1 day);
    end if;
    open rs_cursor; 
    cursor_loop:loop
       FETCH rs_cursor into _userName, _chinese, _math; -- 取数据
       if done=1 then
        leave cursor_loop;
       end if;
       -- 更新表
       update infoSum set total=_chinese+_math where UserName=_userName;
    end loop cursor_loop;
    close rs_cursor;
        END$$
    DELIMITER ;

      mysql存储过程基本语法

    CREATE   
        [DEFINER = { user | CURRENT_USER }]   
        PROCEDURE sp_name ([proc_parameter[,...]])   
        [characteristic ...] routine_body   
      
    CREATE   
        [DEFINER = { user | CURRENT_USER }]   
        FUNCTION sp_name ([func_parameter[,...]])   
        RETURNS type   
        [characteristic ...] routine_body   
           
    proc_parameter:   
        [ IN | OUT | INOUT ] param_name type   
           
    func_parameter:   
        param_name type   
      
    type:   
        Any valid MySQL data type   
      
    characteristic:   
        LANGUAGE SQL   
      | [NOT] DETERMINISTIC   
      | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }   
      | SQL SECURITY { DEFINER | INVOKER }   
      | COMMENT 'string'  
      
    routine_body:   
        Valid SQL procedure statement

    CREATE PROCEDURE and CREATE FUNCTION Syntax 
    例子:

    1.   
      DELIMITER $$   
        
      DROP FUNCTION IF EXISTS f_discount_price$$   
      CREATE FUNCTION f_discount_price   
          (normal_price NUMERIC(8,2))   
          RETURNS NUMERIC(8,2)   
          DETERMINISTIC   
      BEGIN   
          DECLARE discount_price NUMERIC(8,2);   
        
          IF (normal_price > 500) THEN   
              SET discount_price = normal_price * .8;   
          ELSEIF (normal_price >100) THEN   
              SET discount_price = normal_price * .9;   
          ELSE   
              SET discount_price = normal_price;   
          END IF;   
        
          RETURN(discount_price);   
      END$$   
        
      DELIMITER ;


    触发器 
    触发器在INSERTUPDATEDELETEDML语句修改数据库表时触发 
    触发器的典型应用场景是重要的业务逻辑、提高性能监控表的修改等 
    触发器可以在DML语句执行或后触发 
     

    1. DELIMITER $$   
        
      DROP TRIGGER sales_trigger$$   
      CREATE TRIGGER sales_trigger   
          BEFORE INSERT ON sales   
          FOR EACH ROW   
      BEGIN   
          IF NEW.sale_value > 500 THEN   
              SET NEW.free_shipping = 'Y';   
          ELSE   
              SET NEW.free_shipping = 'N';   
          END IF;   
        
          IF NEW.sale_value > 1000 THEN   
              SET NEW.discount = NEW.sale_value * .15;   
          ELSE   
              SET NEW.discount = 0;   
          END IF;   
      END$$   
        
      DELIMITER ;

    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)


    • 本站(WWW.169IT.COM)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
      本站(WWW.169IT.COM)站内文章除注明原创外,均为转载,整理或搜集自网络.欢迎任何形式的转载,转载请注明出处.
      转载请注明:文章转载自:[169IT-IT技术资讯]
      本文标题:mysql 存储过程实例和基本语法
    相关文章推荐:
  • java将类序列化并存储到mysql(使用hibernate)
  • MySQL存储引擎 MySQL Maria
  • MYSQL存储过程里代返回值的存储过程怎么写
  • MySQL存储引擎 Spider For MySQL
  • MySQL存储引擎 MyISAM
  • 更改Mysql数据库存储位置的具体步骤
  • MySQL存储引擎 Q4M
  • MySQL5创建存储过程的示例
  • MySQL 存储引擎 XtraDB
  • MySQL 存储引擎 CascaDB
  • C# 中调用 MySQL 存储过程的示例代码
  • MySQL存储引擎 OQGRAPH
  • MySQL 存储引擎 Mroonga
  • MySQL 高性能存储引擎 TokuDB
  • mysql动态游标学习(mysql存储过程游标)
  • 怎么修改linux centOS的mysql 的数据存储路径
  • C# 调用 MySQL 存储过程的代码
  • 请教各位大侠,在windows环境下的mysql 存储过程、视图在linux下是否都能运行?
  • 想写个shell脚本调用mysql的存储过程,怎么改都执行不了。。。
  • mysql 动态执行存储过程语句
  • 高性能KV型MySQL存储引擎 SeqDB


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2017,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号