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:在预期以下情况之一时遇到“;”符号:ifPL/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
,但它不是。:-)抱歉-我的意思是“…包规范中的变量<代码>计数代码>”。