我当前正在尝试有条件地打开游标,但是编译器将PLS-00103排除在外:遇到了符号“ SELECT”。
CREATE OR REPLACE PROCEDURE proc_faturas_nao_liquidadas(data_inicio IN FATURA.data_emissao%TYPE,
data_fim IN FATURA.data_emissao%TYPE)
IS
curs_faturas SYS_REFCURSOR;
BEGIN
IF (data_inicio is null or data_fim is null)
then
open curs_faturas for (SELECT f.NR_FATURA, f.DATA_EMISSAO, f.VALOR_BASE_PAGAR
FROM FATURA f,
PAGAMENTO p
where p.NR_FATURA = f.NR_FATURA
and ESTADO != 'PAGO'
ORDER BY f.DATA_EMISSAO);
end if;
END;
最终目标是在循环上使用光标来打印行。我已经尝试过,查询可以独立运行。
答案 0 :(得分:0)
您需要删除select语句周围的括号,为此使用 ANSI-92 JOIN标准,最好将过程转换为函数:
CREATE OR REPLACE FUNCTION proc_faturas_nao_liquidadas(
data_inicio FATURA.data_emissao%TYPE,
data_fim FATURA.data_emissao%TYPE
)
RETURN SYS_REFCURSOR IS
curs_faturas SYS_REFCURSOR;
BEGIN
IF (data_inicio is null or data_fim is null) THEN
OPEN curs_faturas FOR
SELECT f.NR_FATURA, f.DATA_EMISSAO, f.VALOR_BASE_PAGAR
FROM FATURA f
JOIN PAGAMENTO p ON p.NR_FATURA = f.NR_FATURA
WHERE ESTADO != 'PAGO'
ORDER BY f.DATA_EMISSAO;
END IF;
RETURN curs_faturas;
END;