【发布时间】:2021-08-03 13:28:07
【问题描述】:
我正在尝试设置一个测试 CASE,它调用一个基于 DATE 范围返回日期的流水线函数。我的目标是每个日期都有一行。
我在尝试创建过程时收到以下错误(见下文)。我知道我必须将传入的 p_id 与从函数返回的结果一起加入,但我似乎无法弄清楚如何因为没有加入它们的链接。
谁能提供正确的代码来解决这个问题并解释我做错了什么。提前感谢所有回答的人和您的专业知识。
错误:PROCEDURE CREATE_DATA 行/列:8/10 PL/SQL:忽略 SQL 语句 行/列:11/13 PL/SQL:ORA-00936:缺少表达式
CREATE OR REPLACE TYPE nt_date IS TABLE OF DATE;
CREATE OR REPLACE FUNCTION generate_dates_pipelined(
p_from IN DATE,
p_to IN DATE
)
RETURN nt_date PIPELINED DETERMINISTIC
IS
v_start DATE := TRUNC(LEAST(p_from, p_to));
v_end DATE := TRUNC(GREATEST(p_from, p_to));
BEGIN
LOOP
PIPE ROW (v_start);
EXIT WHEN v_start >= v_end;
v_start := v_start + INTERVAL '1' DAY;
END LOOP;
RETURN;
END generate_dates_pipelined;
CREATE TABLE data(
d_id NUMBER(6),
d_date DATE
);
CREATE OR REPLACE PROCEDURE create_data (
p_id IN NUMBER,
p_start_date IN DATE,
p_end_date IN DATE
)
IS
BEGIN
INSERT INTO data (d_id, d_date)
VALUES
(p_id,
TABLE( generate_dates_pipelined(p_start_date, p_end_date)
) c
);
END;
EXEC create_data (1, DATE '2021-08-21', DATE '2021-08-30');
【问题讨论】: