• 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中字符串和时间互相转换的方法(自动转换及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-2019,169IT.COM,E-mail:www_169it_com#163.com(请将#改为@)

    浙ICP备11055608号