我可以直接通过SQL select * from语句从java存储过程(oracle)获取结果吗?

在数据库上,我将有一个java存储过程/函数,当它被调用时返回一个多列,多行结果集.

我想直接通过select * from [table]语句访问这些​​结果.

所以java存储过程应该像表一样.

在MySQL中,以下应该是可能的(但不是java存储过程):SELECT col1 FROM(EXEC proc1)

这可能在oracle中proc1是一个java存储过程吗?

解决方法:

This answer在不同的论坛可以帮到你.

查看消息底部的示例,了解如何从Java方法返回的集合中进行选择(也可能是Java存储过程).

以下是有关如何使用Java存储过程执行此操作的示例

1)创建DB对象以定义返回行的类型:

create type try_obj as object (

field_a number,

field_b varchar2(10)

)

/

create type try_obj_tab as table of try_obj

/

2)使用返回Collection的静态方法(GetSampleResult)在DB上创建Java类

create or replace and compile java source named QueryReturn as

import java.sql.*;

import java.util.*;

import oracle.jdbc.*;

import oracle.jdbc.pool.OracleDataSource;

import oracle.sql.*;

public class QueryReturn implements ORADataFactory,ORAData{

private NUMBER field1;

private CHAR field2;

public QueryReturn(OracleConnection conn,int n,String c) throws SQLException {

field1 = new NUMBER(n);

field2 = new CHAR(c,oracle.sql.CharacterSet.make(conn.getStructAttrCsId()));

}

public QueryReturn(NUMBER n, CHAR c) {

field1 = n;

field2 = c;

}

public QueryReturn(Object[] attributes) {

this(

(NUMBER) attributes[0],

(CHAR) attributes[1]

);

}

public QueryReturn(Datum d) throws SQLException {

this(((STRUCT) d).getOracleAttributes());

}

public ORAData create(Datum d, int sqlType) throws SQLException {

if (d == null)

return null;

else {

return new QueryReturn(d);

}

}

public STRUCT toSTRUCT(Connection conn) throws SQLException {

StructDescriptor sd =

StructDescriptor.createDescriptor("TRY_OBJ", conn);

Object [] attributes = { field1,field2 };

return new STRUCT(sd, conn, attributes);

}

public Datum toDatum(Connection conn) throws SQLException {

return toSTRUCT(conn);

}

public static ARRAY GetSampleResult() throws SQLException, ClassNotFoundException {

// initialize the connection

OracleConnection conn = null;

conn = (OracleConnection) (new oracle.jdbc.OracleDriver()).defaultConnection();

// create the return java array

// There will be two Rows

// 1 abc

// 2 dce

QueryReturn javaArray[] = {

new QueryReturn(conn,1,"abc"),

new QueryReturn(conn,2,"dce")

};

// Map the java class to the Oracle type

Map map = conn.getTypeMap();

map.put("TRY_OBJ", Class.forName("QueryReturn"));

ArrayDescriptor jTryObjArrayDesc = ArrayDescriptor.createDescriptor (

"TRY_OBJ_TAB",

conn

);

// create an Oracle collection on client side to use as parameter

ARRAY oracleCollection = new ARRAY(jTryObjArrayDesc,conn,javaArray);

return oracleCollection;

}

}

3)创建Wrap以在函数中使用Java存储过程

create or replace function GetSampleResult

return try_obj_tab

AS LANGUAGE JAVA

NAME 'QueryReturn.GetSampleResult() return oracle.sql.ARRAY';

4)显示结果

SQL> select *

2 from table(GetSampleResult())

3 /

FIELD_A FIELD_B

---------- ----------

1 abc

2 dce

SQL>

标签:java,sql,stored-procedures,oracle

来源: https://codeday.me/bug/20190621/1255122.html

java 存储过程返回结果集_通过SQL“select * from”从java存储过程返回结果集相关推荐

  1. 存储过程中定义sql语句_学习SQL:用户定义的存储过程

    存储过程中定义sql语句 Stored procedures (SPs) are one more powerful database object we have at our disposal. ...

  2. java get方法报空指针_面试的哪些事儿之JAVA程序员面试笔试题(一)

    前言 在一个技术微信群看一个网友最近在一家公司做笔试的题目,然后我就整理了一下,供大家参考一下,希望能够帮助到大家. 笔试内容 1.假设有一个mysql实例,相关信息如下: schema名为test用 ...

  3. mysql存储过程输入参数拆分_一文看懂mysql数据库存储过程、函数、视图、触发器、表...

    概述 抽空总结一下mysql的一些概念性内容,涉及存储过程.函数.视图.触发器等. 一.查看存储过程.函数.视图.触发器.表 1.存储过程 select * from mysql.proc where ...

  4. 用Java代码实现日志记录器_如何在此简单的Java日志记录实现中附加到日志文件? - java...

    我得到了以下用于创建和管理Logger的类.每当执行代码和程序时,都会使用对静态getLogger()捕获块的调用进行记录. public class Log { private static fin ...

  5. java单元测试读文件数据_如何将文本文件资源读入Java单元测试?

    本问题已经有最佳答案,请猛点这里访问. 我有一个单元测试需要使用位于src/test/resources/abc.xml中的XML文件.把文件的内容放到String中最简单的方法是什么? 另外,sta ...

  6. java中Solution怎么用_【leetcode】solution in java——Easy4

    16:Invert Binary Tree 此题:以根为对称轴,反转二叉树. 思路:看到二叉树,我们第一时间要想到处理二叉树的常用方法--BFS.DFS,更常用的是DFS.此题我们先用BFS来思考:B ...

  7. java中解密的思想_北大青鸟翔天解密,Java核心思想两大点

    Java已经成为一个庞大而复杂的技术平台,对于开发人员而言,要想更好的掌握Java技术,深入理解底层的技术处理细节必不可少.对核心概念和思想的掌握可以帮助我们举一反三.触类旁通,有助于提升我们对整个J ...

  8. java超出gc开销限制_超出了GC开销限制– Java堆分析

    java超出gc开销限制 这篇文章是我们原来的GC开销超出问题模式的延续. 正确的Java堆分析对于消除O​​utOfMemoryError:GC开销问题至关重要. 如果您不熟悉此Java HotSp ...

  9. java能调用python吗_如何使用运行时在Java中调用python程序 - java

    我想用来自Java的参数调用python程序.但是我的输出是空白.代码在这里. Python代码在这里: import sys print(sys.argv[1]) Java代码在这里: public ...

最新文章

  1. 用Python不回头也能看美女,这招你会了吗?
  2. SCOM发送邮件通知
  3. 获取打印机分辨率_喵喵机P2S热敏打印机,升级屏幕带来了哪些体验??
  4. C++中的覆盖(重写)、重载、隐藏(重定义)、多态!
  5. navicat 导入SQL文件出错
  6. [2019CSP多校联赛普及组第五周] 调度CPU (贪心)
  7. 鼠标移动响应php程序,jQuery实现的响应鼠标移动方向插件用法示例【附源码下载】...
  8. ( linker command failed with exit code 1) 错误解决方案 项目使用的是pod
  9. 为什么MediaPlayer中onCompletion()每次播放音频时都触发?
  10. 【java】Java 最坑爹的 10 大功能点
  11. Solr4.3整合到Tomcat中并添加MMSeg4j中文分词器
  12. 02 超级搜索术——资源搜索:全面、快速查找全网你想要的任何信息、情报
  13. 神经网络学习小记录64——Pytorch 图像处理中注意力机制的解析与代码详解
  14. 一个屌丝程序猿的人生(六十一)
  15. ubuntu开机密码破解
  16. 《搞不定人,你如何带团队?》读书记录
  17. c++代码使用堆空间实现数据结构栈
  18. 【Day1】一小时入门 python 基础,从安装到入门
  19. si446使用记录(二):使用WDS3生成头文件
  20. 解题记录 LeetCode 下一个更大元素 II 单调栈

热门文章

  1. pc端实现 网页居中显示 且自适应
  2. javascript文本对象
  3. filedisk学习资料
  4. 从零开始学前端:CSS背景颜色 --- 今天你学习了吗?(CSS:Day09)
  5. signature=51b3a9ac95339489ef7384c6e21e303f,nginx – Let’s Encrypt的中间证书
  6. 视频服务器读取hdfs文件,基于HDFS的流媒体服务器Red5视频文件分发的研究与应用...
  7. 力扣76,最小覆盖字串(JavaScript)
  8. linux分支结构,实验四 Shell脚本中的分支结构
  9. ecshop 模板页php,解决ecshop新建页面分页问题
  10. java获取异常信息_Python中获取异常(Exception)信息