Oracle存储过程传参并返回列表以及Java调用过程

--1、存储过程包的创建,数据类型和存储过程定义
CREATE OR REPLACE PACKAGE htjd_package IS--包创建,面向不同客户或者功能类型
TYPE HT_CURSOR IS REF CURSOR;--自定义游标类型
PROCEDURE HT_GETALLPSINFO (ref_cursor OUT HT_CURSOR);--自定义存储过程
PROCEDURE HT_GETPSINFO(ps_id IN integer,ref_cursor OUT HT_CURSOR);
PROCEDURE HT_INVERTHIS(his_year IN varchar2,ref_cursor OUT HT_CURSOR);
end HTJD_PACKAGE;

 

--2、包内容和存储过程内容的实现
CREATE OR REPLACE PACKAGE BODY HTJD_PACKAGE IS
  PROCEDURE HT_GETPSINFO(ps_id IN integer, ref_cursor OUT HT_CURSOR) IS
  begin
    OPEN ref_cursor FOR
      select * from mnt_powerstation where psid = '' || ps_id || '';
  end HT_GETPSINFO;

  PROCEDURE HT_GETALLPSINFO(ref_cursor OUT HT_CURSOR) IS
  BEGIN
    OPEN ref_cursor FOR
      SELECT * FROM mnt_powerstation;
  END HT_GETALLPSINFO;

  PROCEDURE HT_INVERTHIS(his_year IN varchar2,ref_cursor OUT HT_CURSOR) IS
  BEGIN
    OPEN ref_cursor FOR
      'SELECT * FROM MNT_INVERTER_HIS'||his_year;
  END HT_INVERTHIS;
END HTJD_PACKAGE;

 

//3、JAVA代码调用存储过程并读取数据
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class Test {
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		try {
			  /**建立数据库通道连接**/
	          DriverManager.registerDriver (new oracle.jdbc.OracleDriver());
	          Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:test", "test", "test");
              /**1、获取单电站信息**/
	          //CallableStatement stmt = conn.prepareCall("BEGIN HT_GETPSINFO(?, ?); END;");
	          //CallableStatement stmt = conn.prepareCall("{ call HT_GETPSINFO(?, ?) }");  
	          //stmt.setString(1, "1");
	          //stmt.registerOutParameter(2, -10); //REF CURSOR(OracleTypes.CURSOR==-10)
	          //stmt.execute();
	          //ResultSet rs = (ResultSet) stmt.getObject(1);//1代表OUT在第一个参数,2代表OUT在第二个参数
	          //while (rs.next()) {
	          //  System.out.println(rs.getString("psid") +"--"+rs.getString("psname"));
	          //}	          
	          
	          /**获取多电站信息**/
	          CallableStatement stmt = conn.prepareCall("BEGIN htjd_package.HT_INVERTHIS(?,?); END;");
	          //CallableStatement stmt = conn.prepareCall("{ call htjd_package.HT_INVERTHIS(?,?) }");
	          stmt.setString(1, "2014");//1代表输入参数的位置
	          stmt.registerOutParameter(2, -10); //REF CURSOR(OracleTypes.CURSOR==-10),1代表OUT在第一个参数,2代表OUT在第二个参数
	     
	          stmt.execute();
	          ResultSet rs = (ResultSet) stmt.getObject(2);//1代表OUT在第一个参数,2代表OUT在第二个参数
	          while (rs.next()) {
	            System.out.println(rs.getString("INVERTERID") +"--"+rs.getString("COLLECTTIME")+"--"+rs.getString("DCCURRENT"));
	          }
	          
	          /**关闭通道**/
	          rs.close();
	          rs = null;
	          stmt.close();
	          stmt = null;
	          conn.close();
	          conn = null;
	        }
	        catch (SQLException e) {
	          System.out.println(e.getLocalizedMessage());
	        }
	}

}

 



 

 

 

SAP使用XCO框架创建RAP所有对象 通过XCO框架自动生成SAP ABAP开发对象。 阅读详情

相关推荐

Java调用数的存储过程返回集合

Java调用数的Oracle 存储过程返回集合,

oracle存储过程返回数组给java程序

首先在oracle中新建两个数组类型:            create or replace type str_list as varray(1000) of varchar2(40)   create or replace type num_list as varray(1000) of number      新建存储过程    create or replac

shizhan1881的专栏 3126

调用存储过程为自定义对象_支持批量

调用存储过程为二维数组的批量插入 为自定义对象(二维数组), 需要注意里边的数据库连接啊

oracle触发器调用存储过程调用java

虽然吭哧了半天这个方法也没用上,权当学习了吧

waiwai4701 1618

Java获取Oracle存储过程中执行查询返回的结果集

通过JAVA调用ORACLE存储过程,在ORACLE存储过程内部做了一个查询在JAVA中获取该查询结果,这个和SYBASE、SQLSERVER的获取不一样,等我的下一篇文章我会介绍如何获取SYBASE、SQLSERVER在存储过程中执行了查询后如何获取其结果及存储过程的编写。 在Oracle中需要返回查询结果集,必须将其以游标的形式返回,但游标又不是基础类型,因而不能够像返回字符类型一样直接

冯立彬的博客 8091

oracle pl/sql应用解析以及存储过程对应到java中的调用方法

/********************************************************************/ >pl/sql应用解析以及对应到在java中的调用方法 /********************************************************************/ 0. /*************************

zyb243380456的专栏 1314

java 调用oracle数据库返回的结果集

   例子表结构: Sql代码   -- Create table   create table YONGHU   (     USERID NUMBER not null,     NAME   VARCHAR2(20) not null,     AGE    VARCHAR2(20) not null   )   tablespace TEST ...

wumaodan的专栏 412

java调用存储过程传number数_Java代码调用Oracle存储过程

Java代码调用Oracle存储过程,存储函数和包java代码调用如下的存储过程和函数createorreplaceprocedurequeryEmpinfo(enoinnumber,penameoutvarchar2,psaloutnumber,pjoboutvarchar2)asbeginselectename,sal,empjobintopename,...

weixin_42306501的博客 426

oracle存储过程----mybatis传入调用存储过程查询

  上一篇的链接是 oracle存储过程----异常的写法介绍   有这样的需求,比如共有表B1-B17,现在要求传入年度、行政区划,查询所有符合条件的B1-B17的记录,(当然,仅查询这些表中共同有的字段),因为这算是跨表查询了。   一般我们写的sql可能如下: select a.b_type,a.b_name,a.b_sort,c.nd,c.tbrq ,c.zt,c.id,c.tbrmc ...

凌大大的博客 1377

SSM-Mybatis调用Oracle存储过程返回结果集(游标)

1.创建一个包此处创建一个包,是为了创建存储过程时,用游标作为out输数时声明为游标类型用的.--创建一个包 create or replace package types as type empListCursor is ref cursor; end types;2.创建存储过程用in表示存储过程的输入数,用out表示存储过程的输数,此处输数为游标.CREATE OR REPLA

夏一的博客 2370

SSM-Mybatis调用Oracle存储过程返回结果集(游标)示例

原文考:https://www.jianshu.com/p/0ae6d9d66d61?tdsourcetag=s_pctim_aiomsg 1.创建一个包 此处创建一个包,是为了创建存储过程时,用游标作为out输数时声明为游标类型用的. --创建一个包 create or replace package types as type empListCursor is ref curso...

雪儿的博客 2105

oracle存储过程--入门与调试

oracle存储过程--入门与调试 例子如下: create or replace procedure pro_one(p_one in number, p_two out varchar2, p_three in out varcha

1583

编写用Java JDBC 调用Oracle存储过程的接口,支持通过URL进行动态传参

使用说明 数说明 数 说明 示例 procName 必要数,传入存储过程名 testProcedure paramInputTag 可选数,需要传参数到存储过程时,编写传值类型列表 int_string paramInputStr 可选数,需要传参数到存储过程时,编写传值数值列表 1_haha paramOutputTag 可选数,存储过程有输数时,编...

u014486575的博客 912

Java中CallableStatement调用Oracle存储过程总结

一、无返回值的存储过程调用CREATE OR REPLACE PROCEDURE PRO_1(PARA1 IN VARCHAR2,PARA2 IN VARCHAR2) AS BEGIN INSERT INTO DBO.EMP (ID,NAME) VALUES (PARA1, PARA2); END PRO_1;import java.sql.*;import j...

weixin_34190136的博客 94

Oracle存储过程语法学习

Oracle存储过程: 1.1 第一个存储过程 --创建存储过程 create or replace procedure proc1(      p_para1 varchar2,      p_para2 out varchar2,      p_para3 in out varchar2    )as      v_name varchar2(20);    begin   ...

Dragon_a的博客 5441

oracle学习笔记8:存储过程和函数

存储过程和函数是pl/sql中的命名的pl/sql块,它通过编译后存储在数据库中,在使用时通过名字来调用就好。在之前我们使用的都是declare匿名块,这样的方式代码的重用性不高,因为是匿名块,也没有办法调用,就像在java中的匿名方法对象等,只使用一次。因此使用存储过程和函数后,就实现了类似java代码的封装,使用的时候通过名字来调用。 为什么要使用存储过程和函数? 1.匿名块无法直接被jd...

weixin_30363817的博客 79

Oracle存储过程常用技巧,2024Java笔试题总结

即使是面试跳槽,那也是一个学习的过程。只有全面的复习,才能让我们更好的充实自己,武装自己,为自己的面试之路不再坎坷!今天就给大家分享一个Github上全面的Java面试题大全,就是这份面试大全助我拿下大厂Offer,月薪提至30K!我也是第一时间分享来给大家,希望可以帮助大家都能去往自己心仪的大厂!为金三银四做准备!

wfegre的博客 474

jdbc调用存储过程时,如何在将一个list型数据结构作为数传入存储过程。(转)...

不过切记一点,调用Function会问题,一定要是存储过程,不然会挂掉,以此作备忘,害我搞了一半天的~~~~ java 代码 /* 处理传入的数组 */   ArrayDescriptor desc = ArrayDescriptor.createDescriptor("Oracle中自定义数据类型", conn);                ARRAY ar...

soul 452

oracle通过过程上传list保存

一、创建oracle 需要保存的数据类型type和存储过程produce create TYPE "AL01TYPE"

丁三寿 532

工艺路线及工艺流程设计.pptx

工艺路线及工艺流程设计.pptx

上一篇: Myeclipse8.5上基于JAX-WS开发WebService
下一篇: 串口编程 Python 、pyserial
水深千尺
博客等级 码龄18年 5粉丝 94原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值