Oracle 试图编译包体时,我得到错误(37,6):PLS-00103:遇到符号“&引用;当预期以下情况之一时:如果

Oracle 试图编译包体时,我得到错误(37,6):PLS-00103:遇到符号“&引用;当预期以下情况之一时:如果,oracle,plsql,Oracle,Plsql,我试图编译一个包体来测试包中的一个过程,但我一直得到上面的错误 CREATE TABLE TempBicycle AS SELECT * FROM bike_shop.bicycle; CREATE OR REPLACE PACKAGE BIKESHOP AS PROCEDURE EXTRACT_BICYCLES (output_type IN VARCHAR2); PROCEDURE EXTRACT_CUSTOMERS; FUNCTION CUSTOMER_BIK

我试图编译一个包体来测试包中的一个过程,但我一直得到上面的错误

CREATE TABLE TempBicycle AS
SELECT * FROM bike_shop.bicycle;

CREATE OR REPLACE PACKAGE BIKESHOP AS

    PROCEDURE EXTRACT_BICYCLES (output_type IN VARCHAR2);
    PROCEDURE EXTRACT_CUSTOMERS;
    FUNCTION  CUSTOMER_BIKES RETURN BOOLEAN;
    PROCEDURE ARCHIVE_CUSTOMER_BIKES;

    count NUMBER(38,0);

    CURSOR ext_bikes_cur IS
    SELECT SerialNumber, ModelType, PaintID, FrameSize, OrderDate, StartDate, ShipDate, Construction, ListPrice,
            SalePrice, SalesTax, SaleState
    FROM TempBicycle
    ORDER BY OrderDate ASC;

END BIKESHOP;
/

CREATE OR REPLACE PACKAGE BODY BIKESHOP AS

  PROCEDURE EXTRACT_BICYCLES (output_type IN VARCHAR2) IS
  BEGIN
    IF output_type = 'D' THEN
        count := 0;
        FOR Bikes IN ext_bikes_cur LOOP
            INSERT INTO bicycles
            ( SerialNumber, ModelType, PaintID, FrameSize, OrderDate, StartDate, ShipDate, Construction, ListPrice,
                SalePrice, SalesTax, SaleState)
            VALUES ( Bikes.SerialNumber, Bikes.ModelType, Bikes.PaintID, Bikes.FrameSize, Bikes.OrderDate, Bikes.StartDate, 
            Bikes.ShipDate, Bikes.Construction, Bikes.ListPrice, Bikes.SalePrice, Bikes.SalesTax, Bikes.SaleState);
            count := count +1;
        END LOOP;
        DBMS_OUTPUT.PUT_LINE('Records Inputted: ' || count);
    ELSE IF output_type = 'S' THEN
        FOR Bikes IN ext_bikes_cur LOOP
            DBMS_OUTPUT.PUT_LINE(chr(10) || '----------Bike Information----------');
            DBMS_OUTPUT.PUT_LINE ('Serial Number: ' || Bikes.SerialNumber);
            DBMS_OUTPUT.PUT_LINE ('Model: ' || Bikes.ModelType);
            DBMS_OUTPUT.PUT_LINE ('Paint ID: ' || Bikes.PaintID);
            DBMS_OUTPUT.PUT_LINE ('Frame: ' || Bikes.FrameSize);
            DBMS_OUTPUT.PUT_LINE ('Date Ordered: ' || Bikes.OrderDate);
            DBMS_OUTPUT.PUT_LINE ('Start Date: ' || Bikes.StartDate);
            DBMS_OUTPUT.PUT_LINE ('Date Shipped: ' || Bikes.ShipDate);
            DBMS_OUTPUT.PUT_LINE ('Construction: ' || Bikes.Construction);
            DBMS_OUTPUT.PUT_LINE ('Listed Price: ' || Bikes.ListPrice);
            DBMS_OUTPUT.PUT_LINE ('Sale Price: ' || Bikes.SalePrice);
            DBMS_OUTPUT.PUT_LINE ('Sales Tax: ' || Bikes.SalesTax);
            DBMS_OUTPUT.PUT_LINE ('State Sold: ' || Bikes.SaleState);
        END LOOP;   
    ELSE 
        DBMS_OUTPUT.PUT_LINE('Incorrect Input');
    END IF;   
  END;

  PROCEDURE EXTRACT_CUSTOMERS IS
  BEGIN
    NULL;
  END;

  FUNCTION  CUSTOMER_BIKES RETURN BOOLEAN IS
  BEGIN
    RETURN TRUE;
  END;

  PROCEDURE ARCHIVE_CUSTOMER_BIKES IS
  BEGIN
    NULL;
  END;

END BIKESHOP;
/

BEGIN
    BikeShop.ExtractBicyclesaz('S');
END
我希望该过程在传递“S”时向控制台打印光标的内容,在传递“D”时输入光标数据


错误(37,6):PLS-00103:在预期以下情况之一时遇到“;”符号:if

PL/SQL使用
ELSIF
,而不是
ELSE if
。在
EXTRACT_BICYCLES
中纠正这一点,您应该表现良好

嗯,实际上是
如果允许的话,它会改变语句的结构。例如,你想做的是

IF something THEN
  ya_da;
ELSIF something_else THEN
  ya_da_ya_da;
ELSE
  the_other_thing;
END IF;
如果您真的想使用
,否则如果
,代码结构将变为

IF something THEN
  ya_da;
ELSE
  IF something_else THEN
    ya_da_ya_da;
  ELSE
    the_other_thing;
  END IF;
END IF;

因此,对于“外部”IF语句,您需要一个end IF,对于“内部”IF语句,您需要另一个end IF。

…这起作用了,我很难过,因为我在3次不同的时间里看到了这个特定问题,认为它看起来是正确的。在那之后,我现在有一个更奇怪的错误“error(37,6):PLS-00103:在您的主例程中遇到了以下情况之一时遇到了符号“end of file”:begin end function pragma procedure“在您的主例程中,您得到了
BikeShop.extractBikesAz
。你是说
自行车店。提取自行车
?在主例程中,
END
后面还缺少一个分号。我确实注意到了这一点,并在我为使其正常工作而处理事情时修复了它。如果我试图编译整个包体,我会得到“Error(15,22):PLS-00204:函数或伪列‘COUNT’只能在SQL语句中使用。”我从来没有使用过COUNT。如果我试图单独运行这个过程,我会得到上面列出的错误。但是我不确定我缺少了什么来获得计数错误。在包体中有一个名为
count
的变量(
countnumber(38,0);
)。我通常对变量名使用一种宽松的匈牙利表示法,这只是因为Oracle和SQL中有太多保留字,我厌倦了一直弹出这样的消息。如果这个变量是我的代码,我可能会调用它
nCount
,但它不是。:-)抱歉-我的意思是“…包规范中的变量<代码>计数”。