我刚才写了下面的流水线功能。不是 的 究竟 强> 您要求的是什么,但它为您提供了一系列日期的结果集,因此您应该能够将其与您的需求相匹配。
它要求您创建一个类型对象来保存返回值,并使用现有对象而不是创建自定义对象。所以你应该修改它以使用足够大的对象(并使用日期类型而不是字符串)。但功能可以满足您的要求。
请享用!
CREATE OR REPLACE FUNCTION date_range_stream(start_date_in IN DATE, end_date_in IN DATE) RETURN rpt_results_10_obj_type_type DETERMINISTIC PIPELINED IS /* Parameters: start_date_in - First date to return (truncated) end_date_in - Last date to return, inclusive Results: date string formatted as MM/DD/YYYY Author: Stew Stryker Usage: SELECT to_date(text01, 'MM/DD/YYYY') AS a_date FROM TABLE(aeo.aeo_misc_tools.date_range_stream('01-MAR-2009', SYSDATE)) Returns a rows from starting date to current Requires the definition of the following object: CREATE OR REPLACE TYPE rpt_results_10col_obj AS OBJECT ( seq_num NUMBER, place VARCHAR2(20), rep_info VARCHAR2(20), text01 VARCHAR2(512), text02 VARCHAR2(512), text03 VARCHAR2(512), text04 VARCHAR2(512), text05 VARCHAR2(512), text06 VARCHAR2(512), text07 VARCHAR2(512), text08 VARCHAR2(512), text09 VARCHAR2(512), text10 VARCHAR2(512)); */ cur_date DATE := trunc(start_date_in); date_row rpt_results_10col_obj := aeo.rpt_results_10col_obj(NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); BEGIN WHILE cur_date <= trunc(end_date_in) LOOP date_row.text01 := TO_CHAR(cur_date, 'MM/DD/YYYY'); PIPE ROW(date_row); cur_date := cur_date + 1; END LOOP; RETURN; EXCEPTION WHEN no_data_found THEN RETURN; WHEN OTHERS THEN dbms_output.put_line('EXCEPTION IN aeo.aeo_misc_tools.date_range_stream - ' || SQLCODE || ': ' || SQLERRM); RAISE; RETURN; END date_range_stream;