2016-03-03 50 views
-2

我有我編寫的代碼,但問題是我不能在那裏使用ELSEIF語句,我不知道爲什麼,Oracle開發人員不讓我執行它。IF和ELSIF PL/SQL

有人能幫我解決這個問題嗎?

DECLARE 
    CURSOR p_cursor IS 
    SELECT PRODUCT_NAME, PRICE 
     FROM PRODUCT 
    ORDER BY PRICE ; 
    p_row p_cursor%ROWTYPE ; 
    p_name VARCHAR2(30) ; 
    p_price NUMBER ; 
BEGIN 
    dbms_output.put_line(RPAD('Product Name', 25, ' ') || 'Price Status'); 
    dbms_output.put_line(RPAD('-', 24, '-') || RPAD(' -', 14, '-')); 
    FOR p_row IN p_cursor 
    LOOP 
    p_name := p_row.PRODUCT_NAME; 
    p_price := p_row.PRICE ; 

    IF p_price < 5 THEN 
     dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Low'); 
    END IF; 
    IF p_price > 5 AND p_price < 20 THEN 
     dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Medium'); 
    END IF; 
    IF p_price > 20 THEN 
     dbms_output.put_line(RPAD(p_name, 25, ' ') || ' High'); 
    END IF; 

    END LOOP; 
END; 

我想有這樣的事情

IF p_price < 5 THEN 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Low'); 
ELSEIF p_price > 5 AND p_price < 20 THEN 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Medium'); 
ELSE 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' High'); 
END IF; 
+1

你沒有有任何錯誤消息? –

+0

您的代碼不包含'p_price = 5'的情況。 –

回答

4

你的語法錯誤 - 在PL/SQL這不是ELSEIF,這是ELSIF,沒有第二個E:

IF p_price < 5 THEN 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Low'); 
ELSIF p_price > 5 AND p_price < 20 THEN 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' Medium'); 
ELSE 
    dbms_output.put_line(RPAD(p_name, 25, ' ') || ' High'); 
END IF; 
+0

感謝您的幫助,我不知道,我認爲這是正確的方式,並沒有注意到這一點。 –

+2

我總是覺得有趣的是,「正確」的語法只是*有*是一個錯誤的地方,有人在當天把'E'排除在外,而且從未被發現過。我的意思是來吧,'ELSIF'?! –

+0

PL/SQL起源於Ada語言,這就是Ada中IF語句的語法。 – EdStevens

1

你需要使用ELSIF,而不是ELSEIF
例如:

vcValue VARCHAR2(10) := 'ABC'; 

IF vcValue = 'ABC' THEN 
    -- vcValue = 'ABC'; 
ELSIF vcValue = 'DEF' THEN 
    -- vcValue = 'DEF'; 
ELSE 
    -- vcValue is not 'ABC' or 'DEF'; 
END IF; 

這裏是docuentation關於IF,ELSIF鏈接,ELSE聲明:Link