【问题标题】:The function created with compilation errors使用编译错误创建的函数
【发布时间】:2021-06-18 19:17:04
【问题描述】:

我无法成功编译这个 PL/SQL 存储函数。找不到正确的方法..

CREATE OR REPLACE FUNCTION calGrade
    (
    cmark IN student.mark%TYPE
    )
    RETURN VARCHAR2
    IS
        comment VARCHAR2(10);
    BEGIN
        IF cmark := 1 THEN comment := 'Very Poor';
        ELSIF cmark := 2 THEN comment := 'Poor';
        ELSIF cmark := 3 THEN comment := 'Moderate';
        ELSIF cmark := 4 THEN comment := 'Good';   
        ELSIF cmark := 5 THEN comment := 'Excellent';
    END IF;
    RETURN comment;
    END;
    /

【问题讨论】:

    标签: sql oracle plsql oracle11g stored-functions


    【解决方案1】:

    从所有IFs 中删除冒号。

    SQL> CREATE OR REPLACE FUNCTION calGrade (cmark IN student.mark%TYPE)
      2     RETURN VARCHAR2
      3  IS
      4     comment  VARCHAR2 (10);
      5  BEGIN
      6     IF cmark = 1
      7     THEN
      8        comment := 'Very Poor';
      9     ELSIF cmark = 2
     10     THEN
     11        comment := 'Poor';
     12     ELSIF cmark = 3
     13     THEN
     14        comment := 'Moderate';
     15     ELSIF cmark = 4
     16     THEN
     17        comment := 'Good';
     18     ELSIF cmark = 5
     19     THEN
     20        comment := 'Excellent';
     21     END IF;
     22
     23     RETURN comment;
     24  END;
     25  /
    
    Function created.
    
    SQL>
    

    【讨论】:

      【解决方案2】:

      改用case 表达式怎么样?

      comment := (CASE cmark
                      WHEN 1 THEN 'Very Poor'
                      WHEN 2 THEN 'Poor'
                      WHEN 3 THEN 'Moderate'
                      WHEN 4 THEN 'Good'
                      WHEN 5 THEN 'Excellent'
                  END);
      

      【讨论】:

      • 我之前尝试过用例,但我的语法错误。感谢您的指导!
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-08
      • 1970-01-01
      • 1970-01-01
      • 2022-10-18
      • 2018-09-18
      • 1970-01-01
      相关资源
      最近更新 更多