2015-04-30 42 views
-1

所以我一直有这个错误,而且我对于发生了什么事情一无所知。我搜索了一下,阅读了关于这个错误的一些问题,并没有任何工作。我只是想让它运行,这样我就可以完成我的项目。错误必须声明PLS-00201标识符

create or replace procedure LOWINVENTORY is 

--Variables 
ID number; 
itemNamed char(15); 
description char(20); 
startQty number; 

--Define inventory item cursor 
cursor nextItem is 
select inventory.itemID, inventory.itemName, inventory.description, inventory.startQty; 
from inventory 
where inventory.startQty < 5; 

begin 
open nextItem; 
fetch netxtItem into ID, itemNamed, description, startQty; 
if nextItem%notfound then 
    dbms_output.put_line('No items in need of reordering.'); 
else 
    dbms_output.put_line('*********************'); 
    dbms_output.put_line('++Inventory Report++'); 
    dbms_output.put_line('*********************'); 
    dbms_output.put_line('Item Name---ID------Description----------Quantity'); 
    loop 
     dbms_output.put_line(itemNamed||'-'||ID||'-'||description||'-'||startQty); 
     fetch netxtItem into ID, itemNamed, description, startQty; 
     if nextItem%notfound then 
      dbms_output.put_line('************END REPORT*************'); 
      exit when nextItem%notfound; 
    end loop; 
end lowInventory; 

错误: BEGIN LOWINVENTORY;结束;在第1行 * ERROR: ORA-06550:第1行,第9栏: PLS-00201:标识符 'LOWINVENTORY' 必须被声明 ORA-06550:第1行,column7: PL/SQL:语句忽略

编辑:

INSERT INTO inventory(itemID, itemLocation, itemName, description, typicalPrice, startQty) 
VALUES(24548576, 'toolbox1', 'wrench', 'turns bolts', 14.00, 6); 
INSERT INTO inventory(itemID, itemLocation, itemName, description, typicalPrice, startQty) 
VALUES(83742345, 'toolbox1', 'pliers', 'grabs stuff', 11.00, 4); 
INSERT INTO inventory(itemID, itemLocation, itemName, description, typicalPrice, startQty) 
VALUES(39287426, 'chest2', 'jigsaw', 'cuts stuff', 28.00, 3); 
INSERT INTO inventory(itemID, itemLocation, itemName, description, typicalPrice, startQty) 
VALUES(48927349, 'chest1', 'blowtorch', 'torches stuff', 330.00, 2); 
INSERT INTO inventory(itemID, itemLocation, itemName, description, typicalPrice, startQty) 
VALUES(85463455, 'bench3', 'oil filter', 'filters stuff', 16.00, 20); 

创建表:

create table inventory 
    (
     itemID number(8) not null primary key constraint lengthCHK8 check(length(itemID)=8), 
     itemLocation varchar2(10), 
     itemName varchar2(12) not null, 
     description varchar2(20), 
     typicalPrice decimal(7,2) not null constraint notNeg2 check(typicalPrice >=0), 
     startQty number(4) not null constraint notNeg5 check(startQty >=0) 
    ); 

回答

1

你的代码是一个充满与愚蠢的错误, 首先,

select inventory.itemID, inventory.itemName, 
inventory.description, inventory.startQty; --> semicolan here, the statment doesnt end 
from inventory 
where inventory.startQty < 5; 

其次,

cursor nextItem is --> using nextItem as name in cursor but "netxtItem" while opening it, a typo 

三,

没有结束,如果其他部分的内侧,环

下面是已编译的程序, 我创建了库存表,只有4列用于编制程序

SQL> create or replace procedure LOWINVENTORY is 
    2 
    3 --Variables 
    4 ID number; 
    5 itemNamed char(15); 
    6 description char(20); 
    7 startQty number; 
    8 
    9 --Define inventory item cursor 
10 cursor nextItem is 
11 select inventory.itemID, inventory.itemName, inventory.description, inventory.startQty 
12 from inventory 
13 where inventory.startQty < 5; 
14 
15 begin 
16 open nextItem; 
17 fetch nextItem into ID, itemNamed, description, startQty; 
18 if nextItem%notfound then 
19  dbms_output.put_line('No items in need of reordering.'); 
20 else 
21  dbms_output.put_line('*********************'); 
22  dbms_output.put_line('++Inventory Report++'); 
23  dbms_output.put_line('*********************'); 
24  dbms_output.put_line('Item Name---ID------Description----------Quantity'); 
25  loop 
26   dbms_output.put_line(itemNamed||'-'||ID||'-'||description||'-'||startQty); 
27   fetch nextItem into ID, itemNamed, description, startQty; 
28   if nextItem%notfound then 
29    dbms_output.put_line('************END REPORT*************'); 
30    exit when nextItem%notfound; 
31    end if; 
32    end loop; 
33 end if; 
34 
35 end lowInventory; 
36/

Procedure created. 

SQL> 

编辑

SQL> insert into inventory (itemid,itemname,description,startqty) values (1,'abc','descp1',1) ; 

1 row created. 

SQL> insert into inventory (itemid,itemname,description,startqty) values (2,'abcd','descp2',1) ; 

1 row created. 

SQL> set serveroutput on; 


SQL> exec lowInventory; 
********************* 
++Inventory Report++ 
********************* 
Item Name---ID------Description----------Quantity 
abc   -1-descp1    -1 
abcd   -2-descp2    -1 
************END REPORT************* 

PL/SQL procedure successfully completed. 

SQL> 

EDIT 2

与您所提供

SQL> exec lowinventory; 
********************* 
++Inventory Report++ 
********************* 
Item Name---ID------Description----------Quantity 

jigsaw   -39287426-cuts stuff   -3 
pliers   -83742345-grabs stuff   -4 
jigsaw   -39287426-cuts stuff   -3 
blowtorch  -48927349-torches stuff  -2 
************END REPORT************* 

PL/SQL procedure successfully completed. 
+0

哇,感谢这么多的数据。如果可以的话,我会给你买一瓶啤酒。然后,我的Oracle帐户必须发生一些奇怪的事情。我做了更正,我得到了同样的错误。我正在使用命令“exec LOWINVENTORY”并尝试“exec lowInventory”,它们都与上面的错误一样。 –

+0

您可以发表表格结构和样本数据,以便我可以模拟吗? – anudeepks

+0

我已插入示例数据,并运行该过程,请参阅第ouptut的编辑部分 – anudeepks