gpt4 book ai didi

sql - 如何使包装器返回 ref cursor 以外的东西

转载 作者:搜寻专家 更新时间:2023-10-30 19:42:12 24 4
gpt4 key购买 nike

我有以下返回引用游标的 PL SQL 函数,但我使用的应用程序不支持引用游标。我怎样才能让这段代码返回 ref cursor 以外的东西

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;
/

使用这个包,你可以选择你的引用光标:

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

关于sql - 如何使包装器返回 ref cursor 以外的东西,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4648022/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com