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#部分:
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![ExpandedBlockStart.gif](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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!