Home  >  Article  >  Database  >  Mysql存储过程入门知识_MySQL

Mysql存储过程入门知识_MySQL

WBOY
WBOYOriginal
2016-06-01 13:32:22987browse

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
Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn