Oracle11g PLS-00103:遇到符号“;如果;当预期以下情况之一时
以下是我在Oracle中的功能:Oracle11g PLS-00103:遇到符号“;如果;当预期以下情况之一时,oracle11g,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(
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:在预期以下情况之一时遇到符号“如果”:开始函数pragma过程子类型当前光标删除存在在符号“开始”替换为“如果”之前继续
2.PLS-00103:在预期以下情况之一时遇到符号“文件结束”:(开始案例声明结束异常退出,如果循环mod null pragma raise return选择更新
将if语句从匿名开始之前移动到开始之后。
我确信这是错误的。
相应地,您还需要将end语句移动到end if块之后。
希望这有帮助。函数定义不需要
声明
块。您也不能使用批量收集
将数据存储在标量变量中。您需要将批量收集
的结果存储到集合中。将变量定义在IS和BEGINI之间移动,因为批量收集到scal中ars,比如说没有名字的@a_horse_。另外,你必须保证只找到一行。注意你没有设置AccInt。
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;