【JAVA】存储过程学习之路1(Oracle)
2016-03-18 10:48
204 查看
因最近项目的需要,本想通过直接用Jdbc来进行大批量数据的查询以及插入,后来通过实际操作发现,还是太慢,所需时间太长,即使用executeBatch()也太慢了。于是昨天花一下午的时间,通过看教学视频和文档,了解了存储过程的应用。通过今天一上午的改编,成功将Jdbc的存取批量数据操作改成存储过程的调用操作,经检验,存储过程着实要比直接用Jdbc调用快的多。
而初次使用存储过程,遇到了一些小问题,并有一些小心得,在此记录一下:
1. 存储过程的传递参数的类型最好直接用%type来设置,以避免一些潜在的类型问题。
2. 存储过程的传递参数(in out)的定义有几点要注意,首先若想读取传递参数的值,必须定义in;而若想对传递参数进行赋值操作,必须定义out;若即想读取值又想赋值,则须同时定义in out。
3. cursor游标在使用for循环时,循环体内无法获取传入参数,只能获取cursor的参数和for循环的参数。(本人在进行如下操作时,未获取到,不知是否是学艺未精,未找到正确用法,本人后来改为while循环即可)
后来我改成
若是要在java里循环调用存储过程,记住connection不要轻易关,会影响后面的调用。
如果调用存储过程有返回值,要记得关闭结果集。
而初次使用存储过程,遇到了一些小问题,并有一些小心得,在此记录一下:
1. 存储过程的传递参数的类型最好直接用%type来设置,以避免一些潜在的类型问题。
2. 存储过程的传递参数(in out)的定义有几点要注意,首先若想读取传递参数的值,必须定义in;而若想对传递参数进行赋值操作,必须定义out;若即想读取值又想赋值,则须同时定义in out。
3. cursor游标在使用for循环时,循环体内无法获取传入参数,只能获取cursor的参数和for循环的参数。(本人在进行如下操作时,未获取到,不知是否是学艺未精,未找到正确用法,本人后来改为while循环即可)
create or replace procedure insert_date(v_id emp.id%type, v_sex emp.sex%type) is cursor c_cursor is select date from emp where sex = v_sex and emp.age > 18; begin open c_cursor; for v_birth in cursor loop //这里报错,说v_id这个位置表达式参数类型错误 insert into emp_new(id,date) values (v_id,v_birth); end loop; end;
后来我改成
create or replace procedure insert_date(v_id emp.id%type, v_sex emp.sex%type) is v_birth emp.date%type; cursor c_cursor is select date from emp where sex = v_sex and emp.age > 18; begin open c_cursor; fetch c_cursor into v_birth; while c_cursor%found loop insert into emp_new(id,date) values (v_id,v_birth); //这里一定要再让cursor游标取值,否则会陷入死循环,容易漏掉这一句 fetch c_cursor into v_birth; end loop; end;
若是要在java里循环调用存储过程,记住connection不要轻易关,会影响后面的调用。
如果调用存储过程有返回值,要记得关闭结果集。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- MySQL存储过程
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- 基于 Red Hat 的发行版 Oracle Linux 正式发布Oracle Linux 7.1
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序