文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>oracle 返回多个结果集

oracle 返回多个结果集

时间:2010-09-14  来源:慧致澜馨

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!
               

相关阅读 更多 +
排行榜 更多 +
毒药轮盘手机版下载

毒药轮盘手机版下载

休闲益智 下载
剑侠情缘零b服手游下载

剑侠情缘零b服手游下载

角色扮演 下载
惊魂动物园游戏手机版下载

惊魂动物园游戏手机版下载

冒险解谜 下载