以下是我在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:遇到符号&#34; IF&#34;当期望以下之一时:begin function pragma procedure子类型类型当前游标删除存在先前符号&#34;开始&#34;取代了#34; IF&#34;接着说。2.PLS-00103:遇到符号&#34;文件结束&#34;当期望下列之一:(开始情况声明结束异常退出goto如果循环mod空pragma提高返回选择更新,而&lt;&lt;继续关闭当前删除获取锁定插入打开回滚保存点设置sql执行提交forall合并管道清除< / p>
答案 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语句。 希望这会有所帮助。