- 浏览: 14534 次
- 性别:
- 来自: 北京
最新评论
一:无返回值的存储过程
存储过程:
create or replace procedure DATA_TEST_PROC (dqBM in varchar2,strTime in varchar2)
is
type cur is ref cursor ; --定义游标
TABLE_CUR cur; --设置游标别名
tabel_name_count number; --定义number类型变量
isExite number; --同上
i number :=1; -- 定义number类型变量并赋初始值
BEGIN -- 1
Open TABLE_CUR for
'select count(table_name) from user_tables where table_name like '''||UPPER(dqBM)||'HISTORY%''';
FETCH TABLE_CUR INTO tabel_name_count; --获取游标存储值
CLOSE TABLE_CUR; -- 关闭游标
if tabel_name_count > 0
then
begin -- 2
for i in 1..table_name_count
loop
Open Table_CUR for
' select count(*) from '|| dqBM|| ' analysis'||i||' where id like ''' || strTime||'% ''';
FETCH TABLE_CUR INTO isExite;
CLOSE TABLE_CUR;
if isExite > 0
then
begin -- 3
execute immediate ' delete from '||dqBM||'analysis'||i||' where id like ''' ||strTime||'%'';
commit;
DBMS_OUTPUT.put_line(strTime||' 数据已删除');
end;-- 3
end loop;
end; -- 2
END;-- 1
本存储过程实现查询数据库中已存在指定数据并删除。
然后呢,在java里调用时就用下面的代码:
package com.hyq.src; import java.sql.*; import java.sql.ResultSet; public class TestProcedureOne { public TestProcedureOne() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: imsbase"; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, " mis", " mis "); CallableStatement proc = null; proc = conn.prepareCall("{ call HBPGMIS_MONITOR.DATAANALYSIS_DAY_DQ(?,?)}"); proc.setString(1, "bd"); proc.setString(2, "20100301"); proc.execute(); } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } }
二、调用有返回值的存储过程
存储过程如下:
create or replace procedure proc_getHisTabCount (dqbm in varchar2, hisTabCount OUT integer) is --声明全局变量 var_sql String(32765); sql_select varchar2(1000); num_count number; type CurType is ref cursor;-- 定义游标引用 curTerm CurType; -- 设置游标别名 BEGIN Open curTerm for 'select count(*) from user_all_tables where table_name like '''||UPPER(dqbm)||'HISTORY%'''; FETCH curTerm INTO num_count; CLOSE curTerm; if num_count > 0 then hisTabCount := num_count; end if; END proc_getHisTabCount;
以上存储过程有两个参数:一个输入参数,一个输出参数。
实现查询用户对象中表名称like 'HISTORY%'的个数。并返回。
对应java调用如下:
import java.sql.*; import java.sql.ResultSet; public class TestProcedureOne { public TestProcedureOne() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521: imsbase"; Statement stmt = null; ResultSet rs = null; Connection conn = null; CallableStatement cstmt = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, " mis", " mis "); CallableStatement proc = null; proc = conn.prepareCall("{ call HBPGMIS_MONITOR.proc_getHisTabCount(?,?)}"); if(proc != null) { proc.setString(1, "bd"); //设置第一个参数,set输入参数,注意第一个参数是存储过程中的列值 proc.registerOutParameter(2,Types.INTEGER); // 设置第二个参数,注册输出参数 ,若有多个参数,则注册多个几个 proc.execute(); //提交存储过程 output = proc.getInt(2); //以字符串的形式获取输出参数。 System.out.println(output); } } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } }
其中,output = proc.getInt(2); 是过去存储过程对应的列out参数列。如果out在第三列,则getInt(3),若有多个out参数,则注册(.registerOutParameter)多个值,并按列号取值。
三、返回列表值
由于oracle存储过程没有返回值,它的所有返回值都是通过out参数来替代的,列表同样也不例外,但由于是集合,所以不能用一般的参数,但可以用游标存储。
1。 应用package,分两部分做。
a。 建一个程序包,包内只定义一个游标。如下:
create or replace package pack_cursor is -- Author : ADMINISTRATOR -- Created : 2010-4-8 10:29:16 -- Purpose : 创建游标获取数据列表 -- Public type declarations 公共类型声明 type TYPE_CURS is REF CURSOR; --创建游标引用
end pack_cursor;
b. 建立存储过程,如:
create or replace procedure proc_getcursor_value(p_cursor out PACK_CURSOR.TYPE_CURS) is type type_cur is ref cursor; term_type type_cur; cur_value varchar2(20); rows_num integer; begin Open term_type for select name from measureclass t where display = '3'; loop fetch term_type into cur_value; -- 从游标p_cursor中读取值 exit when term_type%notfound; --(dbms_sql.fetch_rows(p_cursor)>0) 通过dbms_sql.fetch_rows(p_cursor)获取游标的行 if term_type%found then dbms_output.put_line(cur_value); end if; end loop; close term_type; end proc_getcursor_value;
以下是java代码调用:
import java.sql.*; import java.io.OutputStream; import java.io.Writer; import java.sql.PreparedStatement; import java.sql.ResultSet; import oracle.jdbc.driver.*; public class TestProcedureTHREE { public TestProcedureTHREE() { } public static void main(String[] args ){ String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@127.0.0.1:1521:imsbase"; Statement stmt = null; ResultSet rs = null; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "mis", "mis"); System.out.println("调用存储过程!:"); ResultSet rSet = null; CallableStatement proc = con.prepareCall("{ call HBPGMIS_MONITOR.proc_getcursor_value(?)}"); System.out.println("注册参数:"); proc.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); System.out.println("提交!:"); proc.execute(); System.out.println("执行完毕!:"); rSet = (ResultSet)proc.getObject(1); System.out.println("查询:"); while (rSet.next()) { System.out.println(rSet.getString(1)); }
} catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } }
发表评论
-
Oracle 数据库管理员经常使用的表和视图
2010-05-12 15:06 8311. dba_开头 dba_users 数据 ... -
Oracle 游标使用大全
2010-04-08 16:09 589查询 SELECT语句用 ... -
转:oracleorahome92agent服务启动异常
2010-04-07 09:10 1231关键字: 本地计算机上的oracleorahome92agen ... -
转:oracleorahome92agent服务启动异常
2010-04-07 09:09 682oracle存储过程,实现查询相同结构的表数据,按日 ... -
sql 经典语句收集
2010-03-29 16:31 614Xml代码 SQL 语句先前写的时候, ... -
oracle 存储过程基本语法
2010-03-29 16:24 660关键字: oracle 1.基本 ... -
oracle 存储过程
2010-01-20 22:27 655create or replace procedure ...
相关推荐
在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity),这是Java标准库提供的一组接口和类,用于与各种数据库进行通信。首先,我们需要添加Oracle JDBC驱动到项目中,例如ojdbc.jar。 1. *...
以上代码展示了如何在Java中调用Oracle数据库的三种类型的存储过程:无返回值的存储过程、有单个返回值的存储过程以及返回列表的存储过程。对于无返回值的存储过程,主要涉及的是参数的输入,通过`execute()`方法...
一个完整的java调用Oracle存储过程的实例,含存储过程和代码注释
在Java编程中,调用Oracle数据库的存储...总之,通过Java调用Oracle存储过程,我们可以有效地执行数据库操作,同时利用存储过程带来的性能和安全优势。了解如何正确设置参数、执行和处理结果是成功实现这一目标的关键。
根据提供的文件信息,我们可以深入解析如何在Java中通过JDBC(Java Database Connectivity)调用Oracle数据库的存储过程。 ### Java调用存储过程实例:详解 #### 存储过程简介 存储过程是一种在数据库中编写的SQL...
在Java编程中,调用Oracle数据库的存储过程是常见的任务,尤其在处理复杂业务逻辑或数据操作时。本文将深入探讨如何使用Java与...记住,实践是最好的老师,尝试编写一个简单的Java程序来调用Oracle存储过程,加深理解。
Java调用Oracle存储过程是数据库操作中常见的任务,特别是在需要执行复杂业务逻辑或者批量处理数据时。本篇文章将详细介绍如何通过Java与Oracle数据库交互,调用存储过程,并提供几个简单的实例帮助新手理解。 首先...
本文将深入探讨如何在Java中调用Oracle存储过程,并输出自定义对象或二维表,以此提升数据处理效率。 首先,我们需要理解Java与Oracle数据库的连接方式。Java通过JDBC(Java Database Connectivity)API来实现对...
在Spring Boot应用中,调用Oracle数据库的存储过程有多种方式。本文主要介绍三种方法,包括使用`entityManagerFactory.unwrap(SessionFactory.class).openSession()`、直接使用`EntityManager`的`...
CallabledStatement 是 Java 中的一种接口,用于调用存储过程。CallabledStatement interface 是 Statement 的一个子接口,提供了一些特殊的方法来调用存储过程。使用 CallabledStatement 可以提高应用程序的性能和...
这篇博文(虽然链接未提供具体内容)可能探讨了如何在Java中调用Oracle存储过程,下面将详细介绍这个主题的相关知识点: 1. **JDBC API**:Java通过JDBC API与数据库通信,包括连接数据库、执行SQL语句和存储过程。...
为了在Java中调用Oracle存储过程,我们需要使用JDBC(Java Database Connectivity)API。JDBC是Java平台的标准接口,用于与各种类型的数据库进行通信。以下是一步步教你如何实现的步骤: 1. **导入必要的库**: 在...
Oracle存储过程是数据库管理系统中的一种重要特性,它允许开发者编写包含一系列SQL语句和PL/SQL块的可重用代码段。在这个“Oracle的一个简单存储过程实例”中,我们可以看到如何在Oracle环境中创建、调用和管理存储...
通过本文的探讨,我们不仅了解了如何在Java中调用Oracle存储过程并传递集合参数的基本原理,还深入实践了相关的技术细节。这对于构建高性能、高可靠性的企业级应用而言,是不可或缺的知识点。在未来,随着数据量的...
值得注意的是,上述代码中的文件名列表(如Project1.cfg、Unit1.dcu等)与Java调用存储过程无关,它们看起来像是Delphi或FreePascal项目的文件,这些文件通常用于描述项目配置、单元信息、表单布局等,而不是与Java...
总结,Java调用Oracle存储过程主要涉及以下步骤: 1. 导入必要的JDBC库。 2. 加载数据库驱动并建立连接。 3. 创建`CallableStatement`对象,设置参数(包括输入和输出参数)。 4. 调用`execute`方法执行存储过程。 5...
总结起来,Java调用Oracle存储过程涉及JDBC、CallableStatement、参数设置以及结果获取等多个环节。理解这些概念并熟练运用,对于Java开发者来说是至关重要的,尤其是在处理与数据库交互的复杂业务场景中。