社区
Oracle
帖子详情
pl/sql存储过程返回record类型和集合类型(is table of record)的结果,Java里如何调用呢?
leolee
2004-09-13 03:15:07
pl/sql存储过程返回record类型和集合类型(is table of record)的结果,Java里如何调用呢?
...全文
910
7
打赏
收藏
pl/sql存储过程返回record类型和集合类型(is table of record)的结果,Java里如何调用呢?
pl/sql存储过程返回record类型和集合类型(is table of record)的结果,Java里如何调用呢?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用AI写文章
7 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
baffling
2004-11-18
打赏
举报
回复
gz
leolee
2004-09-14
打赏
举报
回复
谢谢楼上的。
建临时表的方式我也考虑过,但是要增加一张表我要经过申请和审核才可以新增,如果能直接从Java中取到Record和Collection当然最好了,实在不行我也只能用临时表的方式了。
fightintokyo
2004-09-13
打赏
举报
回复
这种需求我在上一个项目也遇到过。不过我不是用record解决的。
我的方法是
1 建立一个基于session的临时表。用你的例子
CREATE GLOBAL TEMPORARY TABLE MsgInfo (
error_code varchar2,
data varchar2,
message varchar2)
ON COMMIT PRESERVE ROWS;
注意表是事先建立好的,不是在存储过程中动态生成的。
不要担心与别的用户的处理互相干扰,在你的session中插入的data只有你自己能看到。
2 然后进行你的业务逻辑。比如处理1,处理2...
当上述处理中有异常发生时,将相关信息插入到MsgInfo 中。
3 在存储过程的最后,open 一个 cursor 并返回之。
open cursor_name for select * from MsgInfo;
4 在java端用resultset拿到结果集后,
如果是0条记录的话,则整个处理正常结束。
如果有记录的话,则有异常发生,具体的内容也到可以拿到。细节应该不用讲了吧。
上述方法可以解决你的问题么。
leolee
2004-09-13
打赏
举报
回复
比如这样的数据类型定义:
Type Message is Record(
error_code varchar2,
data varchar2,
message varchar2
);
Type Messages is table of Message;
leolee
2004-09-13
打赏
举报
回复
这个数据集不是存储在数据表中的,是经过一些列的处理和计算的结果,并包含一些错误信息和数据信息,具体说就是每一个处理使用了一个Record来整理各项信息,多个处理就使用集合类型来组织这些Record成一个列表。
fightintokyo
2004-09-13
打赏
举报
回复
集合类型用java.sql.Array 或 oracle.sql.ARRAY
不过为什么要向Java返回集合类型呢,个人感觉把多个数据放到cursor中,返回REF CURSOR 型,java端用普通的java.sql.ResultSet就可以了亚。
myrou
2004-09-13
打赏
举报
回复
And the java to use this could be:
import java.sql.*;
import java.io.*;
import oracle.jdbc.driver.*;
class curvar
{
public static void main (String args [])
throws SQLException, ClassNotFoundException
{
String driver_class = "oracle.jdbc.driver.OracleDriver";
String connect_string = "jdbc:oracle:thin:@slackdog:1521:oracle8";
String query = "begin :1 := sp_listEmp; end;";
Connection conn;
Class.forName(driver_class);
conn = DriverManager.getConnection(connect_string, "scott", "tiger");
CallableStatement cstmt = conn.prepareCall(query);
cstmt.registerOutParameter(1,OracleTypes.CURSOR);
cstmt.execute();
ResultSet rset = (ResultSet)cstmt.getObject(1);
while (rset.next ())
System.out.println( rset.getString (1) );
cstmt.close();
}
}
pl
sql
存储过程
入门
想学习
pl
sql
真的很适合你 经验的总结 doc文件仅有36k
Oracle知识之集合和成员函数.pptx
Oracle知识之集合和成员函数.pptx
oracle 10 学习资料.pptx
oracle 10 学习资料.pptx
PL
SQL
简介.pdf
第四章
PL
SQL
简介.pdf,武汉科技大学课件.
oracle
存储过程
超详细使用手册
oracle
存储过程
超详细使用手册,内容很详细,绝对受用
Oracle
17,140
社区成员
55,259
社区内容
发帖
与我相关
我的任务
Oracle
Oracle开发相关技术讨论
复制链接
扫一扫
分享
社区描述
Oracle开发相关技术讨论
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章