PLS-00103:遇到符号" IF"当期待以下之一

时间:2015-12-07 22:10:31

标签: oracle11g

以下是我在Oracle中的功能:

create or replace
FUNCTION CALCULATEINT
( DebtNo IN VARCHAR2
, JFlag IN VARCHAR2
, FloatingInterestRate IN NUMBER
) RETURN NUMBER IS
AccInt NUMERIC(17,8):=0;
BEGIN
DECLARE 
      PrincipalDue NUMERIC(11,2);
      InterestDue NUMERIC(17,8); 

  IF (JFlag IN ('B', 'C', 'Y')) THEN
   BEGIN
        SELECT
            DEF_JUDG_PRINC_DUE ,
           DEF_JUDG_PRINC_RATE          
       bulk collect into PrincipalDue ,InterestDue 
        FROM
            DANT 
        WHERE
            AND DE_NO = DebtNo ;
      END;
  END IF;
  RETURN AccInt;
END;

我收到以下错误:

1.PLS-00103:遇到符号" IF"当期望以下之一时:begin function pragma procedure子类型类型当前游标删除存在先前符号"开始"取代了#34; IF"接着说。

2.PLS-00103:遇到符号&#34;文件结束&#34;当期望下列之一:(开始情况声明结束异常退出goto如果循环mod空pragma提高返回选择更新,而&lt;&lt;继续关闭当前删除获取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除< / p>

1 个答案:

答案 0 :(得分:0)

create or replace
FUNCTION CALCULATEINT
( DebtNo IN VARCHAR2
, JFlag IN VARCHAR2
, FloatingInterestRate IN NUMBER
) RETURN NUMBER IS
AccInt NUMERIC(17,8):=0;
BEGIN
DECLARE 
      PrincipalDue NUMERIC(11,2);
      InterestDue NUMERIC(17,8); 


   BEGIN
    IF (JFlag IN ('B', 'C', 'Y')) THEN
        SELECT
            DEF_JUDG_PRINC_DUE ,
           DEF_JUDG_PRINC_RATE          
       bulk collect into PrincipalDue ,InterestDue 
        FROM
            DANT 
        WHERE
            AND DE_NO = DebtNo ;

  END IF;
  END;
  RETURN AccInt;
END;

将if语句从匿名开始之前移动到开始之后。 我确信这是错误的。 相应地,您还需要在结束if块之后移动end语句。 希望这会有所帮助。