PLS-00103:遇到符号“ SELECT”

时间:2018-11-27 16:08:13

标签: sql oracle stored-procedures plsql

我当前正在尝试有条件地打开游标,但是编译器将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;

最终目标是在循环上使用光标来打印行。我已经尝试过,查询可以独立运行。

1 个答案:

答案 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;