- 浏览: 740397 次
- 性别:
- 来自: 郑州
文章分类
- 全部博客 (396)
- JAVA (50)
- ORACLE (22)
- HIBERNATE (1)
- SPRING (26)
- STRUTS (4)
- OTHERS (0)
- MYSQL (11)
- Struts2 (16)
- JS (33)
- Tomcat (6)
- DWR (1)
- JQuery (26)
- JBoss (0)
- SQL SERVER (0)
- XML (10)
- 生活 (3)
- JSP (11)
- CSS (5)
- word (1)
- MyEclipse (7)
- JSTL (1)
- JEECMS (2)
- Freemarker (8)
- 页面特效 (1)
- EXT (2)
- Web前端 js库 (2)
- JSON http://www.json.org (3)
- 代码收集 (1)
- 电脑常识 (6)
- MD5加密 (0)
- Axis (0)
- Grails (1)
- 浏览器 (1)
- js调试工具 (1)
- WEB前端 (5)
- JDBC (2)
- PowerDesigner (1)
- OperaMasks (1)
- CMS (1)
- Java开源大全 (2)
- 分页 (28)
- Eclipse插件 (1)
- Proxool (1)
- Jad (1)
- Java反编译 (2)
- 报表 (6)
- JSON (14)
- FCKeditor (9)
- SVN (1)
- ACCESS (1)
- 正则表达式 (3)
- 数据库 (1)
- Flex (3)
- pinyin4j (2)
- IBATIS (3)
- probe (1)
- JSP & Servlet (1)
- 飞信 (0)
- AjaxSwing (0)
- AjaxSwing (0)
- Grid相关 (1)
- HTML (5)
- Guice (4)
- Warp framework (1)
- warp-persist (1)
- 服务器推送 (3)
- eclipse (1)
- JForum (5)
- 工具 (1)
- Python (1)
- Ruby (1)
- SVG (3)
- Joda-Time日期时间工具 (1)
- JDK (3)
- Pushlet (2)
- JSP & Servlet & FTP (1)
- FTP (6)
- 时间与效率 (4)
- 二维码 (1)
- 条码/二维码 (1)
最新评论
-
ctrlc:
你这是从web服务器上传到FTP服务器上的吧,能从用户电脑上上 ...
jsp 往 FTP 上传文件问题 -
annybz:
说的好抽象 为什么代码都有两遍。这个感觉没有第一篇 和第二篇 ...
Spring源代码解析(三):Spring JDBC -
annybz:
...
Spring源代码解析(一):IOC容器 -
jie_20:
你确定你有这样配置做过测试? 请不要转载一些自己没有测试的文档 ...
Spring2.0集成iReport报表技术概述 -
asd51731:
大哥,limit传-1时出错啊,怎么修改啊?
mysql limit 使用方法
前几天项目里数据存储支持了存储过程,当时赶进度,只是简单的拿SQL Server 2000做了测试。今天同事要用Oracle9i数据库,于是研究了一下Oracle的存储过程,不看不知道啊,居然Oracle里要支持存储过程如此复杂!!上网查资料,自己做实验,终于弄了大半夜才鼓捣出来!
项目里的需求很简单:通过一个存储过程返回一个数据集(当然,我只负责简单调用存储过程,存储过程内部可能很复杂了^_^)。不同于SQL Server 2000的存储过程,Oracle里的存储过程分为procedure和function两种,如果用procedure的话,无法直接返回结果集,读取结果集的方式比较复杂;function是可以返回结果集的存储过程,调用相对简单些。
下面的介绍将以一张BOOK表的查询为例:
create table BOOK
(
BOOKNUMBER CHAR(3) not null,
BOOKNAME VARCHAR2(50),
BOOKPRICE NUMBER(18,2)
)
(
BOOKNUMBER CHAR(3) not null,
BOOKNAME VARCHAR2(50),
BOOKPRICE NUMBER(18,2)
)
要返回数据集,就需要使用Oracle里的reference cursor类型,不过Oracle里这个类型用的方式比较罗唆(搞不明白Oracle为什么要弄的这么复杂),首先要声明一个引用的cursor类型,这个通过创建一个包来实现:
CREATE OR REPLACE PACKAGE PKG_TEST
AS
TYPE REFCURSOR IS REF CURSOR;
END PKG_TEST;
AS
TYPE REFCURSOR IS REF CURSOR;
END PKG_TEST;
然后创建我们的function存储过程:
create or replace function query_book(book_no varchar) return PKG_TEST.REFCURSOR is
Result PKG_TEST.REFCURSOR;
begin
open Result for
select * from book where book_no =book.booknumber;
return(Result);
end query_book;
Result PKG_TEST.REFCURSOR;
begin
open Result for
select * from book where book_no =book.booknumber;
return(Result);
end query_book;
在这个存储过程中,我们传入了查询键值key,返回了一个数据集对象
这样我们就有了一个名为query_book的存储过程,它可以返回一个结果数据集。要调用这个存储过程,可以通过CallableStatement接口来调用,这样需要写成类似'{?=call query_book(?)}'的查询语句,并且参数和返回值都必须用代码设置;在这里,一些简单的存储过程,也可以通过查询来调用。下面就是我使用的调用方法:
public class FuncTest {
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:LeeDB",
"TEST", "test");
Statement stmt = connection.createStatement();
ResultSet dataset = stmt.executeQuery("SELECT query_book('001') FROM DUAL");
if (dataset.next()) {
ResultSet ret = (ResultSet)dataset.getObject(1);
while( ret.next() ) {
System.out.print(ret.getString(1));
System.out.print("\t");
System.out.print(ret.getString(2));
System.out.print("\t");
System.out.println(ret.getDouble(3));
}
}
}
}
public static void main(String[] args) throws Exception {
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection connection = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521:LeeDB",
"TEST", "test");
Statement stmt = connection.createStatement();
ResultSet dataset = stmt.executeQuery("SELECT query_book('001') FROM DUAL");
if (dataset.next()) {
ResultSet ret = (ResultSet)dataset.getObject(1);
while( ret.next() ) {
System.out.print(ret.getString(1));
System.out.print("\t");
System.out.print(ret.getString(2));
System.out.print("\t");
System.out.println(ret.getDouble(3));
}
}
}
}
注意这里返回的数据集中内嵌了function返回的数据集,需要进行特殊处理。
上面代码执行之后可以成功返回结果:
001 Pascal编程 20.0
发表评论
-
oracle数据表增加、修改、删除字段操作
2012-06-28 18:54 0增加字段 declare vstr_sql ... -
oracle 存储过程in out inout三种参数模式
2011-08-09 10:36 1265Oracle 过程中定义了in|out|i ... -
Win7下安装Oracle 10g常见错误解决
2011-06-18 10:21 1058首先下对版本,Oracle 10g支持Win7版: http ... -
oracle 拆分字符串函数 返回结果集
2011-03-24 10:48 2214create or replace function spli ... -
oracle中substr函数的用法
2011-03-23 15:55 833In oracle/PLSQL, the substr fun ... -
oracle行转列
2011-03-15 19:20 14181. 概述 最近论坛很多人提的问题都与行列转换有关系,所以 ... -
oracle级联删除
2010-12-31 14:22 877通过触发器删除 create or replace trig ... -
oracle 10 TNSLSNR.exe 占用8080端口修改方法
2010-12-29 16:49 1526oracle 10服务一启动 TNSLSNR.exe 会占用8 ... -
java.sql.SQLException: Io 异常: Connection refused
2010-11-03 09:00 1817具体异常是: java.sql.SQLException: ... -
转:Oracle存储过程的开发的介绍
2010-06-30 13:59 1279以下的文章主要是 ... -
oracle视图及其功能
2010-06-30 11:33 1141select * from dictionary; ... -
Windows 下常见Oracle服务介绍
2010-04-07 14:07 1270Windows ... -
Oracle时间日期函数
2010-03-24 17:26 1105TO_DATE格式(以时间:2007-11 ... -
通过JDBC操纵Oracle LOB字段
2009-09-07 15:16 963在Oracle中,LOB(Larg ... -
Oracle常用数据字典查询语句
2009-08-27 09:27 1154查看当前用户的缺省表空间SQL>select usern ... -
oracle 百分比换算问题
2009-08-26 09:41 3311最近在做投票系统,每个投票的选项要算其在所有投票中的百分比: ... -
ORACLE -- Oracle分析函数详述【二】
2009-07-23 17:39 1374一.分析函数2(rank\dense_rank\row_num ... -
ORACLE -- Oracle分析函数详述【一】
2009-07-23 17:34 1724一.分析函数1(OVER) 目录: ============ ... -
oracle top N
2009-07-03 17:58 237731.在ORACLE中实现SELECT TOP N 由于 ... -
oracle 创建序列 表空间 用户
2009-07-03 10:11 1732--创建序列 CREATE SEQUENCE increa ...
相关推荐
Oracle函数_JDBC常用写法
Oracle SQL Developer, v1.5.0.54.40 Release Notes 完整版下载:http://www.oracle.com/technology/global/cn/software/products/sql/index.html 1. Known Issues 1.1 General - Print prints only one page ...
#hibernate.connection.driver_class oracle.jdbc.driver.OracleDriver #hibernate.connection.username ora #hibernate.connection.password ora #hibernate.connection.url jdbc:oracle:thin:@localhost:1521:orcl...
driverClassName="oracle.jdbc.driver.OracleDriver" url="jdbc:oracle:thin:@127.0.0.1:1521:ora9"/> <Resource name="jdbc/mysqlds" auth="Container" type="javax.sql.DataSource" maxActive...
而越来越多专业知识的 Blog 的出现,让我们看到了 Blog 更多所蕴涵的巨大的信息价值:不同的 Blog 选择不同的内容,收集和整理成为很多人关注的专业 Blog ——目前越来越多的人获取信息的来源是一些固定的 Blog 。...
11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction...
11.5.9. 使用SimpleJdbcCall返回的ResultSet/REF Cursor 11.6. 用Java对象来表达JDBC操作 11.6.1. SqlQuery类 11.6.2. MappingSqlQuery类 11.6.3. SqlUpdate类 11.6.4. StoredProcedure类 11.6.5. SqlFunction...
第五章 Group Function(组函数)......130 第六章 Sub queries(子查询)............132 第七章 指定运行时变量..................133 第八章 数据模型和数据库设计......134 第九章 Creating Tables(创建表)......135...
{13.10}可滚动结果集}{201}{section.13.10} {13.11}Procedure}{201}{section.13.11} {14}xml}{204}{chapter.14} {14.1}元素}{204}{section.14.1} {14.2}XML的设计}{205}{section.14.2} {14.3}DTD/Schema}{205}...
第五章 Group Function(组函数)......130 第六章 Sub queries(子查询)............132 第七章 指定运行时变量..................133 第八章 数据模型和数据库设计......134 第九章 Creating Tables(创建表)......135...
org.geotools.data.jdbc.attributeio org.geotools.data.jdbc.datasource org.geotools.data.jdbc.fidmapper org.geotools.data.jdbc.referencing org.geotools.data.memory org.geotools.data.mif org.geo...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 5.4.2.1. 注册用户自定义的PropertyEditor 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 ...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...
5.4.1. 设置和获取属性值以及嵌套属性 5.4.2. 内建的PropertyEditor实现 6. 使用Spring进行面向切面编程(AOP) 6.1. 简介 6.1.1. AOP概念 6.1.2. Spring AOP的功能和目标 6.1.3. Spring的AOP代理 6.2. @...
|-------|-------|--|--Function.java 常用方法定义类源文件 |-------|-------|--|--ListClass.java 前台类别显示类源文件 |-------|-------|--|--Log.java 日志类源文件 |-------|-------|--|--Login.java 用户登录...
com.kingdee.bos.jdbc.trace com.kingdee.bos.kscript com.kingdee.bos.kscript.adapter com.kingdee.bos.kscript.dom com.kingdee.bos.kscript.dom.expr com.kingdee.bos.kscript.dom.stmt ...
7.7 Oracle Georaster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177 7.8 Postgis Raster . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ...
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................
Not Using Commons Logging ................................................................... 12 Using SLF4J ..............................................................................................