当前位置: 首页 > 面试题库 >

如何使包装器返回引用游标以外的其他内容

郁高韵
2023-03-14
问题内容

我有以下PL SQL函数,该函数返回ref游标,但是我正在使用的应用程序不支持ref游标。我怎样才能使此代码返回引用游标以外的其他内容

FUNCTION getADedIcWarningsProv(p_hos_id IN work_entity_data.hos_id%TYPE
                                ,p_date        IN DATE
                                )


RETURN eOdatatypes_package.eOrefcur
  IS

v_refcur eOdatatypes_package.eOrefcur;

BEGIN

OPEN v_refcur FOR
SELECT IF_type IF_type
      ,COUNT(*)       number_infected
FROM (SELECT DISTINCT bd.PT_id             PT_id
                     ,CASE WHEN NVL(O_package.get_O_code_property(pw.warning_code,'Setl'),'N') = 'Y'
                      THEN cd.description
                      ELSE 'Other'
                      END                       IF_type
      FROM PT_ad       pad
          ,BD_details      bd
          ,PT_warnings pw
          ,codes            cd
      WHERE bd.current_record = 'Y'
      AND   bd.BD_location IS NOT NULL
      AND   bd.BD_status IN (SELECT code
                                FROM codes
                               WHERE prog_code IN (1, 1, 2) 
                                 AND code_type = 4)
      AND   bd.AD_no = pad.AD_no
      AND   pad.hos_id = p_hos_id
      AND   pw.PT_id   = bd.PT_id
      AND   pw.warning_to IN ('D','Q')
      AND   p_date BETWEEN pw.applies_start
                       AND NVL(pw.applies_end,p_date)
      AND   NVL(O_package.get_O_code_property(pw.warning_code,'INFT'),'Y') = 'N'
      AND   pw.warning_code = cd.code)
GROUP BY IF_type
ORDER BY IF_type;
RETURN v_refcur;
END getADedIcWarningsProv;

输出:

IF_TYPE                           NUMBER_IF
---------------------------------------- ---------------
C                                                 2
M                                                 6
Other                                             4
3 rows selected

问题答案:

您可以使用管道函数一次以一个SQL引擎可以理解的方式返回结果集一个记录。

create or replace package WrapperSample is

  type TResultRow is record(
     if_type         codes.cd%type
    ,number_infected Integer);

  type TResultRowList is table of TResultRow;

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined;

end WrapperSample;
/

create or replace package body WrapperSample is

  function GetADedIcWarningsProv
  (
    p_hos_id in work_entity_data.hos_id%type
   ,p_date   in date
  ) return TResultRowList
    pipelined is
    v_refcur   eOdatatypes_package.eOrefcur;
    currentRow TResultRow;
  begin
    v_refcur := YourSchema.getADedIcWarningsProv(p_hos_id, p_date);

    loop
      fetch v_refcur
        INTO currentRow;
      exit when v_refcur%NotFound;
      pipe row(currentRow);
    end loop;

    close v_refcur;

    return;
  end;

end WrapperSample;
/

使用此软件包,您可以选择您的ref游标:

SELECT if_type
      ,number_infected
FROM table(WrapperSample.getADedIcWarningsProv(1, 2))


 类似资料:
  • 问题内容: 如果文件中有一组方法,是否可以将这些文件包含在另一个文件中,但不带任何前缀(即文件前缀)调用它们? 所以,如果我有: 我怎么这样称呼它: 问题答案: 您将需要将其他文件作为模块导入,如下所示: 如果您不想在函数名称前加上模块名称,请执行以下操作: 如果要导入模块的所有成员,请执行以下操作: 编辑: 这是Dive Into Python 的精彩一章,在该主题上有更深入的介绍。

  • 问题内容: 在PostgreSQL中,我有一个数据库,我打算进行以下表声明: 一切正常,除了在创建最后一个表(更正)时出现以下错误: 错误:没有唯一的约束匹配给定键的引用表“提交” 我对更正表的打算是对每个提交都有唯一的更正,但是一个提交可以(也可以不)具有更正。 我该如何解决这个错误?是设计问题还是表声明错误? 问题答案: 外键约束不关心所引用的列是否在引用另一列本身。但是引用的列 必须 是唯一

  • 问题内容: 使用CSS时,三个主要浏览器在某些区域的行为似乎完全不同。 在这种情况下,我试图创建一个图像网格: 在此示例中,我需要一个容器,该容器本身包含几个设置为从上到下流动并在到达底部时进行包装的元素。最终为我提供了照片列。 但是我需要容器水平扩展以容纳包装好的元素: 行为如下: IE 11- 正确,容器水平拉伸以包裹包裹元素的每一列 Firefox- 容器仅包装元素的第一列,其余元素溢出。

  • 问题内容: 我尝试学习Go,但是我经常感到沮丧,因为其他语言似乎无法在Go中使用某些基本功能。因此,基本上,我想使用在其他文件中定义的结构类型。我能够使用结构类型以外的功能。在main.go中, 正如我所期望的那样,它可以完美运行(以及所有其他功能)(列表位于$ GOPATH中)。在软件包列表中,我将struct定义如下: 我想在其他结构中使用此结构,所以我尝试做这样的事情, 但不幸的是,我收到未

  • 类具有类似类型的方法(让我们称其为收集器)。我认为这些方法可以通过使其返回一个包装泛型值的类来实现。 这是示例代码 此代码产生错误 我知道我可以通过使用泛型值创建收集器类来解决这个问题。我希望Collector类是单例的,我是指bean。所以我不能这么做。 有办法吗?

  • 我有一个管理书籍集合应用程序(比如播放列表)。 我想显示一个带有垂直RecollecerView的collection列表,并在每一行中显示一个水平RecollecerView中的book列表。 当我将内部水平RecyclerView的layout_height设置为300dp时,它会正确显示,但当我将其设置为WRAP_CONTITER时,它不会显示任何内容。我需要使用wrap_content,因