首页  >  文章  >  数据库  >  Mysql存储过程入门知识_MySQL

Mysql存储过程入门知识_MySQL

WBOY
WBOY原创
2016-06-01 13:32:221016浏览

bitsCN.com

Mysql存储过程入门知识

 

[sql] #1,查看数据库所有的存储过程名    #--这个语句被用来移除一个存储程序。不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程  #SELECT NAME FROM mysql.proc WHERE db='数据库名';   

 

[sql] #2,列出所有的存储过程   #SHOW  PROCEDURE  STATUS;  #3,查看存储过程详细  #SHOW CREATE PROCEDURE 数据库名.存储过程名;   

[sql] #4,存储过程的创建 由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。  #每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT   #CREATE PROCEDURE存储过程名 (参数列表); 使用BEGIN ... END复合语句来包含多个语句  #   BEGIN  #         SQL语句代码块  #   END  

 

[sql] #5,DECLARE语句(用来声明局部变量);  #要给变量提供一个默认值,需包含一个DEFAULT子句。如果没有DEFAULT子句,初始值为NULL。局部变量的作用范围在它被声明的BEGIN ... END块内。  #DECLARE var_name[,...] type [DEFAULT value]   

 

[sql] #6,变量SET语句  #SET var_name = expr [, var_name = expr]    [sql] #7,SELECT ... INTO语句;这个SELECT语法把选定的列直接存储到变量,因此,只有单一的行可以被取回。  #SELECT col_name[,...] INTO var_name[,...] table_expr  [sql] #8,修改存储过程   #ALTER PROCEDURE 存储过程名SQL语句代码块;    [sql] #9,删除存储过程  #DROP PROCEDURE  IF  EXISTS 存储过程名;   #存储过程的调用;存储过程名称后面必须加括号,哪怕该存储过程没有参数传递。  [sql] #10,CALL 存储过程名(参数列表);    [sql] #11,MySQL 存储过程参数(in;)  #跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。  [sql] #12,MySQL 存储过程参数(out)  #MySQL 存储过程 &ldquo;out&rdquo; 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值  [sql] #13,MySQL 存储过程参数(inout)  #MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。   #注:如果仅仅想把数据传给 MySQL 存储过程,那就使用&ldquo;in&rdquo; 类型参数;  #    如果仅仅从 MySQL 存储过程返回值,那就使用&ldquo;out&rdquo; 类型参数;  #    如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用&ldquo;inout&rdquo; 类型参数。    #demo1:创建一个简单的存储过程(获取用户总数),带输出参数。  #--删除存储过程  DROP PROCEDURE IF EXISTS proc_users_getCount  #--创建存储过程  CREATE PROCEDURE proc_users_getCount(OUT n INT)  BEGIN       SELECT COUNT(*) FROM users ;  END  #--MYSQL调用存储过程  CALL proc_users_getCount(@n);     #demo2:创建一个简单的存储过程(根据用户id获取用户信息),带输入参数。  #--删除存储过程  DROP PROCEDURE IF EXISTS proc_users_findById;  #--创建存储过程  CREATE PROCEDURE proc_users_findById(IN n INT)  BEGIN       SELECT * FROM users WHERE id=n;   END  #--定义变量  SET @n=1;  #--调用存储过程   CALL proc_users_findById(@n);    #Last:操作存储过程时应注意:  #1.删除存储过程时只需要指定存储过程名即可,不带括号;  #2.创建存储过程时,不管该存储过程有无参数,都需要带括号;  #3.在使用SET定义变量时应遵循SET的语法规则;  #SET @变量名=初始值;  #4.在定义存储过程参数列表时,应注意参数名与数据库中字段名区别开来,否则将出现无法预期的结果.    #END:java中调用存储过程util  #   // 执行存储过程  #   @Override  #   public ResultSet execProc(final String procName, final Object[] params) {  #       return (ResultSet) getHibernateTemplate().execute(  #               new HibernateCallback() {  #                   public Object doInHibernate(Session session)  #                           throws HibernateException, SQLException {  #                       CallableStatement cstmt = session.connection()  #                               .prepareCall(procName);  #                       if (params != null) {  #                           for (int i = 0; i < params.length; i++) {  #                               cstmt.setObject(i + 1, params[i]);  #                           }  #                       }  #                       ResultSet rs = cstmt.getResultSet();  #                       return rs;  #                   }  #               });  #   }  

 

 

bitsCN.com
声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn