楼主: genomics

[精华] 在PL/SQL中如何写返回多行

[复制链接]
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
21#
发表于 2003-4-4 11:26 | 只看该作者
存储过程的out参数可以定义为ref cursor,可以返回多行

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
22#
 楼主| 发表于 2003-4-4 11:33 | 只看该作者
to:husthxd
请问怎么写这个存储过程?能写个示例吗?谢谢!

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
23#
发表于 2003-4-4 11:47 | 只看该作者
CREATE OR REPLACE package types
as
type cursorType is ref cursor;
end;
/

CREATE OR REPLACE PROCEDURE sp_test(p_cursor out types.cursorType)
IS
BEGIN
  open p_cursor for select * from dual;
END;
/

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
24#
 楼主| 发表于 2003-4-4 12:39 | 只看该作者
谢谢 husthxd
按照你给的示例,存储过程建好了,编译通过。
现在要解决javabean端如何接收这个out参数,我正在做调试,有了结果我会贴出来。

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
25#
 楼主| 发表于 2003-4-4 13:04 | 只看该作者
问题已经解决,具体代码如下
PL/SQL部分:
CREATE or replace PACKAGE test_pkg AS
  TYPE g_cursor IS REF CURSOR RETURN gene_info%ROWTYPE;
  procedure test_select(result out g_cursor);
END test_pkg;

CREATE OR REPLACE PROCEDURE sp_test(p_cursor out types.cursorType)
IS
BEGIN
open p_cursor for select * from gene_info;
END;

javabean部分:
import java.sql.*;
import java.io.*;
import java.util.*;
import oracle.jdbc.driver.*;
import oracle.sql.*;


public class test
{
    Connection conn = null;
  int size=0;


public  ResultSet  getResult()
  
{
   ResultSet cursor=null;
    try {
      DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
   conn = DriverManager.getConnection(sConnStr,"888","88888";
     CallableStatement stmt = conn.prepareCall("{call sp_test(?)}";
                    stmt.registerOutParameter (1, OracleTypes.CURSOR);
                    stmt.execute ();
                    cursor = ((OracleCallableStatement)stmt).getCursor (1);
                    return cursor;
               
    }
        catch(Exception e)
                {
                System.err.println("aaaaaaaaaaa: " + e.toString());
                return cursor;

                }

                         
   }


}

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
26#
 楼主| 发表于 2003-4-4 13:12 | 只看该作者
对不起,刚才那个package贴错了,应该是:
create or replace package types
as
type cursorType is ref cursor;
end;

使用道具 举报

回复
论坛徽章:
168
马上加薪
日期:2014-02-19 11:55:142012新春纪念徽章
日期:2012-02-13 15:10:582012新春纪念徽章
日期:2012-01-04 11:49:54蜘蛛蛋
日期:2011-12-05 16:08:56ITPUB十周年纪念徽章
日期:2011-11-01 16:19:41设计板块每日发贴之星
日期:2011-07-22 01:01:02ITPUB官方微博粉丝徽章
日期:2011-06-30 12:30:16管理团队成员
日期:2011-05-07 01:45:082011新春纪念徽章
日期:2011-01-25 15:42:562011新春纪念徽章
日期:2011-01-25 15:42:33
27#
发表于 2003-4-4 13:18 | 只看该作者
good luck!
在用Java做中间件?

使用道具 举报

回复
论坛徽章:
1
授权会员
日期:2005-10-30 17:05:33
28#
 楼主| 发表于 2003-4-4 13:58 | 只看该作者
是的,再次谢谢各位的帮助。

使用道具 举报

回复
招聘 : Hadoop大数据库开发
论坛徽章:
39
生肖徽章2007版:猴
日期:2008-01-02 17:35:532010年世界杯参赛球队:阿根廷
日期:2010-07-02 16:05:252010年世界杯参赛球队:加纳
日期:2010-04-26 12:31:372010新春纪念徽章
日期:2010-03-01 11:06:23祖国60周年纪念徽章
日期:2009-10-09 08:28:00ITPUB8周年纪念徽章
日期:2009-09-27 10:21:22生肖徽章2007版:猴
日期:2009-03-10 21:29:55生肖徽章2007版:猴
日期:2009-03-10 21:23:27IT宝贝
日期:2009-02-18 13:00:30生肖徽章2007版:猴
日期:2008-12-25 14:22:01
29#
发表于 2003-4-4 15:51 | 只看该作者
cursor 是不是没有close?

使用道具 举报

回复
论坛徽章:
0
30#
发表于 2003-4-4 18:05 | 只看该作者

pipelined

CREATE OR REPLACE type test as object
( x int,
  y varchar2(10)
);
/
CREATE TYPE testtab AS TABLE OF test
/

create or replace function testfun(...)
   RETURN test PIPELINED AS
out_rec   test:=test(null,null);
ix    integer;
sy   varchar2(10);
cursor cur is select * from t;
begin
open cur;
  loop
     FETCH cur INTO ix,sy;
     WHEN cur%NOTFOUND;
      out_rec.x:=ix;
     out_rec.y:=sy;
     PIPE ROW(out_rec);
END LOOP;
CLOSE cur;
   --         
RETURN;
end;
/

sql *plus :

select * from table(testfun());

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

TOP技术积分榜 社区积分榜 徽章 团队 统计 知识索引树 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛
CopyRight 1999-2011 itpub.net All Right Reserved. 北京盛拓优讯信息技术有限公司版权所有 联系我们 未成年人举报专区 
京ICP备16024965号-8  北京市公安局海淀分局网监中心备案编号:11010802021510 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表