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#部分:
(2)在上述代码中da.TableMappings.Add("Table", "LJT_QX_GR_500_LJT");//da经过Fill方法以后,填充到dataset中的表的名字默认是"Table","Table2"..."TableN", 要想使dataset中的表名是我们所要的,就要用些方法来匹配表名,切记,“Table”中T 必须是大写。
PS:在此之前,没有接触过包,这次用了以后个人觉得包就是像类一样的把类型,函数,过程封装在一起,为使用及管理提供方便,这是一方面,另外一方面有些应用中确实离不开包。
Over!