PL / SQL

时间:2016-03-03 21:12:35

标签: oracle if-statement plsql oracle11g syntax-error

我编写了这段代码,但问题是我不能在那里使用ELSEIF语句,我不知道为什么,Oracle Developer也不允许我执行它。

有人能帮我解决这个问题吗?

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;

2 个答案:

答案 0 :(得分: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;

答案 1 :(得分: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;

以下是关于IF,ELSIF,ELSE声明的文档链接:Link