我正在学习引用游标、记录类型概念。下面是我正在尝试的逻辑 [我知道哪几行是错误的],在高层次上,外部函数 'get_modified_ssd_rsd2' 将订单号作为参数之一 [其下有多行],其中 line_id 逐一传递给内部函数。'get_modified_ssd_rsd1' 是内部函数,在 refcursors 中返回 2 个日期。它已成功测试。我正在尝试/询问的是,如何通过 refcursor 中的外部函数 [即 get_modified_ssd_rsd2] 返回 orderno、lineid、date1、date2 - 四个参数?
CREATE OR REPLACE FUNCTION get_modified_ssd_rsd2 (
p_depot_i IN VARCHAR2,
p_planned_delivery_dttm IN DATE,
p_service_level_id IN NUMBER,
p_rmaord_no IN NUMBER)
RETURN SYS_REFCURSOR
IS
CURSOR c1 (p_rmaord_no NUMBER)
IS SELECT line_id
FROM SalesOrerLinesTable
WHERE 1 = 1 AND order_number = 801259549;
l_ssd tablename.column%TYPE;
l_rsd tablename.column%TYPE;
l_rmaord_no tablename.column%TYPE;
j NUMBER := 0;
l_dates SYS_REFCURSOR;
TYPE line_ssdrsd_rectype IS REF CURSOR;
line_ssdrsd_type line_ssdrsd_rectype;
TYPE rec_orderline
IS RECORD
(
rmaord_no tablename.column%TYPE,
line_id tablename.column%TYPE,
schedule_ship_date tablename.column%TYPE,
request_ship_date tablename.column%TYPE
);
ro rec_orderline;
BEGIN
l_rmaord_no := p_rmaord_no;
FOR i IN c1 (l_rmaord_no)LOOP
j := j + 1;
l_dates :=
get_modified_ssd_rsd1 (p_depot_i,
p_planned_delivery_dttm,
p_service_level_id,
i.line_id);
lst (j).rmaord_no := l_rmaord_no;
lst (j).line_id := i.line_id;
lst (j).schedule_ship_date := l_dates.l_ssd;
lst (j).request_ship_date := l_dates.l_rsd;
END LOOP;
EXCEPTION
WHEN OTHERS
THEN
DBMS_OUTPUT.put_line (' Error - ' || SQLERRM);
END get_modified_ssd_rsd2;
谢谢你!
- 尝试了流水线函数,但无法捕获来自 refcursors 中的外部函数的结果
- 尝试了记录类型、外部函数中 refcursor 的记录类型,然后捕获 refcursors 中内部函数返回的多行等等,但是没有成功。
通过外部函数在 refcursor 中返回结果是强制性要求。谢谢!