2015-09-06 75 views
0

我试图用IF.. ELSE条件和语句来更新库存的单位,但是当试图运行它,我得到一个错误:下面的if/else在PL SQL循环

PLS-00103: Encountered the symbol "LOOP" when expecting one of the following: 
    if 

代码,我它运行在一个循环吐出所有的数据,直到用完:

DECLARE 

--Declare cursor 
CURSOR part_cur 
IS 
SELECT PARTNUMBER, PARTDESC, ITEMCLASS, UNITSONHAND, UNITSONHAND 
FROM PART 
ORDER BY UPPER(PARTNUMBER); 

--Declare variables 
v_PartNumber PART.PARTNUMBER%TYPE; 
v_PartDesc PART.PARTDESC%TYPE; 
v_ItemClass PART.ITEMCLASS%TYPE; 
v_UnitsOnHand PART.UNITSONHAND%TYPE; 
v_nUnitsOnHand PART.UNITSONHAND%TYPE; 

BEGIN 
OPEN part_cur; 
LOOP 

--Initialise variables 
    FETCH part_cur INTO v_PartNumber, v_PartDesc, v_ItemClass, v_UnitsOnHand, v_nUnitsOnHand; 
     EXIT WHEN part_cur%NOTFOUND; 

--Perform Calculations 
    IF ITEMCLASS = 'AO' AND UNITSONHAND <20 THEN v_nUnitsOnHand := UNITSONHAND + 5; 
ELSE IF ITEMCLASS = 'AO' AND UNITSONHAND <100 THEN v_nUnitsOnHand := UNITSONHAND + 10; 
ELSE IF ITEMCLASS = 'AO' AND UNITSONHAND >=100 THEN v_nUnitsOnHand := UNITSONHAND + 25; 
END IF; 

--Format for output 

--Output results 
     DBMS_OUTPUT.PUT_LINE('Part ' || UPPER(v_PartNumber) || ' - ' || INITCAP(v_PartDesc) || ' of item class ' || UPPER(v_ItemClass) || ' had a total of ' || v_UnitsOnHand || ' units on hand, 
     and now has ' || v_nUnitsOnHand || ' units on hand after the database was updated. 
     '); 
END LOOP; 
CLOSE part_cur; 
END; 

任何帮助或指针将不胜感激,谢谢。用于访问这些字段

record_var.v_PartNumber, etc 

回答

-1

试试这个:

FOR record_var in part_cur 
LOOP 
    {...statements...} 
END LOOP; 

之后,你可以写。

2

IF声明目前看起来是这样的:

IF ITEMCLASS = 'AO' AND UNITSONHAND <20 THEN 
    v_nUnitsOnHand := UNITSONHAND + 5; 
ELSE 
    IF ITEMCLASS = 'AO' AND UNITSONHAND <100 THEN 
     v_nUnitsOnHand := UNITSONHAND + 10; 
    ELSE 
     IF ITEMCLASS = 'AO' AND UNITSONHAND >=100 THEN 
      v_nUnitsOnHand := UNITSONHAND + 25; 
     END IF; 

所以它的缺席两场END IF秒。所以当Oracle看到END LOOP时,它会抱怨,因为它预计会有END IF

为了解决这个问题,只是ELSIF同时替换您的ELSE IF S的,这是出于这样的目的的特殊关键字:

IF ITEMCLASS = 'AO' AND UNITSONHAND <20 THEN 
    v_nUnitsOnHand := UNITSONHAND + 5; 
ELSIF ITEMCLASS = 'AO' AND UNITSONHAND <100 THEN 
    v_nUnitsOnHand := UNITSONHAND + 10; 
ELSIF ITEMCLASS = 'AO' AND UNITSONHAND >=100 THEN 
    v_nUnitsOnHand := UNITSONHAND + 25; 
END IF; 
+0

哦欢呼声谢谢,我不知道有多深我的'ELSE .. IF'陈述正在进行中。 – user3521826

+0

@ user3521826:不客气! – ruakh