oracle 返回多个结果集

oracle sql部分:

包声明:

CREATE OR REPLACE PACKAGE SELECT_LJTQXBYWELLID AS
TYPE T_CURSOR IS REF CURSOR;
PROCEDURE Getljtqx(
    LJT_QX_GR_500_LJT OUT T_CURSOR,
    LJT_QX_CNL_500_LJT OUT T_CURSOR,
    LJT_QX_DEN_500_LJT OUT T_CURSOR,
    LJT_QX_R250_500_LJT OUT T_CURSOR,
    wellid in varchar2
);
END SELECT_LJTQXBYWELLID;

 

包体

CREATE OR REPLACE PACKAGE BODY SELECT_LJTQXBYWELLID AS
PROCEDURE Getljtqx
(
LJT_QX_GR_500_LJT OUT T_CURSOR,
LJT_QX_CNL_500_LJT OUT T_CURSOR,
LJT_QX_DEN_500_LJT OUT T_CURSOR,
LJT_QX_R250_500_LJT OUT T_CURSOR,
wellid in varchar2
)
IS
BEGIN
OPEN LJT_QX_GR_500_LJT FOR
SELECT * FROM  LJT_QX_GR_500_LJT  WHERE jh=wellid;
OPEN LJT_QX_CNL_500_LJT FOR
SELECT * FROM  LJT_QX_CNL_500_LJT  WHERE jh=wellid;
OPEN LJT_QX_DEN_500_LJT  FOR
SELECT * FROM  LJT_QX_DEN_500_LJT  WHERE jh=wellid;
OPEN LJT_QX_R250_500_LJT FOR
SELECT * FROM  LJT_QX_R250_500_LJT  WHERE jh=wellid;
END Getljtqx;
END SELECT_LJTQXBYWELLID;

 

oracle本身并不支持返回多个结果集,所以要通过游标的方式,要完成效果,注意以下几点

(1)在写上述sql的时候,编译怎么发生“无效字符”这样的错误 ,查了很久,才知道 是因为汉化的plsql中可能带有中文空格什么的,所以把前边的空格全部去掉,中间的空格在英文的状态下重写一下,好了,错误排除。

 

C#部分:

 

代码
            DataSet ds = new DataSet();
            OracleConnection conn 
= new OracleConnection(_connStr); 
            OracleCommand command 
= conn.CreateCommand();   
            command.CommandText 
= "select_ljtqxbywellid.Getljtqx";
            command.Parameters.Add(
"LJT_QX_GR_500_LJT", OracleType.Cursor).Direction = ParameterDirection.Output;
            command.Parameters.Add(
"LJT_QX_CNL_500_LJT", OracleType.Cursor).Direction = ParameterDirection.Output;
            command.Parameters.Add(
"LJT_QX_DEN_500_LJT", OracleType.Cursor).Direction = ParameterDirection.Output;
            command.Parameters.Add(
"LJT_QX_R250_500_LJT", OracleType.Cursor).Direction = ParameterDirection.Output;
            command.Parameters.Add(
"WELLID", OracleType.VarChar).Direction = ParameterDirection.Input;
            command.Parameters[
"WELLID"].Value="BK20";
            command.CommandType 
= CommandType.StoredProcedure;
            
using (OracleDataAdapter da = new OracleDataAdapter(command))
            {
                da.TableMappings.Add(
"Table""LJT_QX_GR_500_LJT");
                da.TableMappings.Add(
"Table1""LJT_QX_CNL_500_LJT");
                da.TableMappings.Add(
"Table2""LJT_QX_DEN_500_LJT");
                da.TableMappings.Add(
"Table3""LJT_QX_R250_500_LJT");
                da.Fill(ds);      
            }

 

 

(2)在上述代码中da.TableMappings.Add("Table", "LJT_QX_GR_500_LJT");//da经过Fill方法以后,填充到dataset中的表的名字默认是"Table","Table2"..."TableN", 要想使dataset中的表名是我们所要的,就要用些方法来匹配表名,切记,“Table”中T 必须是大写。

 

PS:在此之前,没有接触过包,这次用了以后个人觉得包就是像类一样的把类型,函数,过程封装在一起,为使用及管理提供方便,这是一方面,另外一方面有些应用中确实离不开包。

Over!
               

posted @ 2010-09-14 13:49  慧致澜馨  阅读(1574)  评论(0编辑  收藏  举报