从函数中获取多个值

Getting multiple values from a function

我的客户 table 的字段为:(PK:ID NUMBER)、PRICE NUMBER、PAYMENT_TYPE_ID NUMBER、SESSION_AREA NUMBER 我从我的页面创建了一个动态操作,以便根据我的 :P2007_CLIENTS_ID.

从 CLIENTS table 获取上述值

首先我创建了这个类型:

CREATE OR REPLACE EDITIONABLE TYPE  "PATIENT_DETAILS" as object
( payment_type number,
session_area number,
price number
)
/

然后我创建了这个函数:

create or replace FUNCTION "F_PATIENT_DETAILS"
(patient_id in NUMBER, session_date date)
RETURN patient_details
IS

    v_payment_type number;
    v_session_area number;
    v_price number;

BEGIN

    SELECT CLIENTS.PAYMENT_TYPE_ID into v_payment_type
    FROM CLIENTS
    WHERE CLIENTS.ID = patient_id;

    SELECT CLIENTS.SESSION_AREA into v_session_area
    FROM CLIENTS
    WHERE CLIENTS.ID = patient_id;

    SELECT CLIENTS.PRICE into v_price
    FROM CLIENTS
    WHERE CLIENTS.ID = patient_id;

    if v_price is null then
        SELECT POLICIES.PRICE into v_price
        FROM POLICIES
        WHERE POLICIES.ACTIVE = 1 
        AND to_char(session_date, 'MM-DD-YYYY') BETWEEN POLICIES.START_DATE AND POLICIES.END_DATE;
    end if;

    return patient_details(v_payment_type, v_session_area, v_price);


END;

如何使用动态操作从我的页面中的这个函数获取值? 我试过这个:Identification-> Set Value, Set Type -> PL/SQL Function Body:

declare
  My_Result PATIENT_DETAILS;
begin
  My_Result := F_PATIENT_DETAILS(:P2007_CLIENTS_ID, :P2007_SESSION_DATE);
  
end;

要提交的项目-> P2007_CLIENTS_ID, :P2007_SESSION_DATE 受影响的元素 -> P2007_PAYMENT_TYPE_ID, :P2007_SESSION_AREA, :P2007_PRICE

但什么也没发生..!

在您的函数 returned 之后,这三个字段永远不会分配新值,例如:

:P2007_PAYMENT_TYPE_ID := my_result.payment_type;

此外,没有理由对 CLIENTS 进行 3 次单独查询。您可以一次完成此操作。

SELECT c.PAYMENT_TYPE_ID, c.SESSION_AREA, c.PRICE 
into v_payment_type, v_session_area, v_price
FROM CLIENTS c
WHERE c.ID = patient_id;

更进一步,您可以将 c.price 与政策子查询合并。 其中对表示为字符的日期有一个可疑的过滤器。我怀疑这会 return 准确的结果。