初窥Mysql存储过程

开始看了哈存储过程的原理的时候是在工作上遇到一个问题,我想根据不同的判断条件来取的不同的结果集,但是呢,如果从代码逻辑上来实现非常麻烦,很明显就看出来是最笨的办法,这个时候老大叫我看看存储原理,看了之后豁然开朗。

给我的感觉存储过程其实就是一段有逻辑的Sql语句的集合,在这里存储过程就是一个函数,你传入不同的值可以获取到不同的结果集

先看看存储过程是如何书写和在Java里面如何调用的

1DELIMITER $$

2CREATE PROCEDURE getshenpi(IN docid INT,IN mercode VARCHAR(50),IN addtype INT )
3BEGIN
4IF(addtype=0)THEN
5SELECT * FROM data_of_doc INNER JOIN doc ON doc.id=data_of_doc.doc_id  WHERE data_of_doc.doc_id=docid;
6END IF;
7IF(addtype=1)THEN
8SELECT * FROM doc LEFT JOIN data_of_doc ON doc.id=data_of_doc.doc_id WHERE data_of_doc.mercode=mercode;
9END IF;
10IF(addtype=2)THEN
11SELECT * FROM data_of_doc INNER JOIN doc ON doc.id=data_of_doc.doc_id  WHERE data_of_doc.mercode=mercode;
12END IF;
13END$$

14DELIMITER【1】;
第一行是声明一个分隔符,这样的目的是为了防止5,8,9这里的sql语句的;混合无法被识别。第二行是声明一个存储过程(其实就是类似函数对吧 至于什么是IN这些后面在来扯)后面的其实就是基本的语法,也就是逻辑处理。 最后14行要声明回来。因为之前你在你做了分隔符改变的声明,sql执行完了你要声明回来。【 我在这里犯了很多次错误,不然怎么建立存储过程,总说我第一句有问题,为什么呢?找了好久才发现是最后14行转换的时候没有空格出来,也就是我做标注1的地方,一定要细心】
现在有存储过程了,如何进行调用呢?当你申明了一个函数你会如何调用?其实原理都差不多,只是语法有点不一样罢了。
CallableStatement call = con.prepareCall("{call getshenpi(?,?,?)}");
call.setInt(1, usernum);// 这里用的是存储过程0是新建 1是增肌 2是变更。。。。。。
call.setInt(3, addtype);
call.setString(2, mercode);
b = call.execute();
while (b) {
ResultSet res = call.getResultSet();
while (res.next()) {

X


list.add(fi);
b=call.getMoreResults();
// System.out.println("bean:"+list.get(0).getField2());
}
代码很简单,唯一要注意的就是最后一个getMoreResults这里,当我们执行存储过程的时候,万一有许多的结果集怎么办呢?就是这里返回的Bool值来判断是否继续获得新的结果集。
接着是函数参数的问题IN OUT INOUT因为懒得做实验所以直接给出结果
IN就是说参数进来,纵然你改变他的值结果还是传进来的哪个值
OUT意味着值可以改变也可以返回出来
INOUT貌似一样?这里有点不严谨。
最后是我记得的一些比较简单的语法哈哈
查看全部的存储过程:show procudure status......手打的 字母错误忘理解。。。
删除某个存储过程: drop procudure XXX
我又懒了其他语法请搜索其他的文档- -。。。。。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值