zoukankan      html  css  js  c++  java
  • [置顶] Mysql存储过程入门知识

    Mysql存储过程入门知识


    #1,查看数据库所有的存储过程名  
    #--这个语句被用来移除一个存储程序。不能在一个存储过程中删除另一个存储过程,只能调用另一个存储过程
    #SELECT NAME FROM mysql.proc WHERE db='数据库名'; 
    #2,列出所有的存储过程 
    #SHOW  PROCEDURE  STATUS;
    #3,查看存储过程详细
    #SHOW CREATE PROCEDURE 数据库名.存储过程名;  
    #4,存储过程的创建 由括号包围的参数列必须总是存在。如果没有参数,也该使用一个空参数列()。
    #每个参数默认都是一个IN参数。要指定为其它参数,可在参数名之前使用关键词 OUT或INOUT 
    #CREATE PROCEDURE存储过程名 (参数列表); 使用BEGIN ... END复合语句来包含多个语句
    #   BEGIN
    #         SQL语句代码块
    #   END
    #5,DECLARE语句(用来声明局部变量);
    #要给变量提供一个默认值,需包含一个DEFAULT子句。如果没有DEFAULT子句,初始值为NULL。局部变量的作用范围在它被声明的BEGIN ... END块内。
    #DECLARE var_name[,...] type [DEFAULT value] 
    #6,变量SET语句
    #SET var_name = expr [, var_name = expr]  
    #7,SELECT ... INTO语句;这个SELECT语法把选定的列直接存储到变量,因此,只有单一的行可以被取回。
    #SELECT col_name[,...] INTO var_name[,...] table_expr
    #8,修改存储过程 
    #ALTER PROCEDURE 存储过程名SQL语句代码块;  
    #9,删除存储过程
    #DROP PROCEDURE  IF  EXISTS 存储过程名; 
    #存储过程的调用;存储过程名称后面必须加括号,哪怕该存储过程没有参数传递。
    #10,CALL 存储过程名(参数列表);  
    #11,MySQL 存储过程参数(in;)
    #跟 C 语言的函数参数的值传递类似, MySQL 存储过程内部可能会修改此参数,但对 in 类型参数的修改,对调用者(caller)来说是不可见的(not visible)。
    #12,MySQL 存储过程参数(out)
    #MySQL 存储过程 “out” 参数:从存储过程内部传值给调用者。在存储过程内部,该参数初始值为 null,无论调用者是否给存储过程参数设置值
    #13,MySQL 存储过程参数(inout)
    #MySQL 存储过程 inout 参数跟 out 类似,都可以从存储过程内部传值给调用者。不同的是:调用者还可以通过 inout 参数传递值给存储过程。 
    #注:如果仅仅想把数据传给 MySQL 存储过程,那就使用“in” 类型参数;
    #    如果仅仅从 MySQL 存储过程返回值,那就使用“out” 类型参数;
    #    如果需要把数据传给 MySQL 存储过程,还要经过一些计算后再传回给我们,此时,要使用“inout” 类型参数。
    
    #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;
    #					}
    #				});
    #	}
    


  • 相关阅读:
    Locust 场景执行:Web UI 中执行
    第1章 计算机网络和因特网
    目录
    计算机网络--自定向下的方法
    mysql索引总结
    7_异常处理
    6_面向对象-下之类的结构:内部类
    6_面向对象-下之关键字:interface
    6_面向对象-下之关键字:abstract
    6_面向对象-下之关键字:final
  • 原文地址:https://www.cnblogs.com/snake-hand/p/3162991.html
Copyright © 2011-2022 走看看