从函数中获取多个值
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 准确的结果。
我的客户 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 准确的结果。