从函数中获取多个值

问题描述

我的 CLIENTS 表包含以下字段:(PK:ID NUMBER)、PRICE NUMBER、PAYMENT_TYPE_ID NUMBER、SESSION_AREA NUMBER 我从我的页面创建了一个动态操作,以便根据我的 :P2007_CLIENTS_ID 从 CLIENTS 表中获取上述值。

首先我创建了这种类型:

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;

如何使用动态操作从我的页面中的此函数获取值? 我试过这个:标识-> 设置值,设置类型-> PL/sql 函数体:

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

但什么也没发生...!

解决方法

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

: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 与策略子查询合并。 它对表示为字符的日期有一个可疑的过滤器。我怀疑这会返回准确的结果。