2014-10-10 61 views
-1

我有一个写一个程序来计算学生的平均分数:我的PL/SQL块有什么问题?

DECLARE 
    rno NUMBER(10); 
    wt NUMBER(10); 
    dbms NUMBER(10); 
    se NUMBER(10); 
    toc NUMBER(10); 
    per FLOAT(10); 
    total NUMBER(10); 
BEGIN 
    rno := &rno; 
    wt := &wt; 
    dbms := &dbms; 
    se := &se; 
    toc := &toc; 

    IF(wt < 40 OR se < 40 OR toc < 40 OR dbms < 40) THEN 

     dbms_output.Put_line('Fail'); 
     total := (wt + se + toc + dbms); 
     per := (total/400) * 100; 

     IF(per > 75) THEN 
      dbms_output.Put_line('grade A'); 
     ELSIF(per > 65 AND per < 75) THEN 
      dbms_output.Put_line('grade B'); 
     ELSIF(per > 40 AND per < 65) THEN 
      dbms_output.Put_line('grade c'); 
     ELSE 
      dbms_output.Put_line('Invalid Input'); 
     END IF; 

     dbms_output.Put_line('percentage is' ||per); 
    END IF; 
END; 
/

有程序中没有错误。但是程序的输出如下:

Enter value for rno: 1 
old 10: rno:=&rno; 
new 10: rno:=1; 
Enter value for wt: 23 
old 11: wt:=&wt; 
new 11: wt:=23; 
Enter value for dbms: 56 
old 12: dbms:=&dbms; 
new 12: dbms:=56; 
Enter value for se: 74 
old 13: se:=&se; 
new 13: se:=74; 
Enter value for toc: 84 
old 14: toc:=&toc; 
new 14: toc:=84; 

PL/SQL procedure successfully completed. 

SQL>/
Enter value for rno: 2 
old 10: rno:=&rno; 
new 10: rno:=2; 
Enter value for wt: 45 
old 11: wt:=&wt; 
new 11: wt:=45; 
Enter value for dbms: 25 
old 12: dbms:=&dbms; 
new 12: dbms:=25; 
Enter value for se: 73 
old 13: se:=&se; 
new 13: se:=73; 
Enter value for toc: 22 
old 14: toc:=&toc; 
new 14: toc:=22; 

PL/SQL procedure successfully completed. 

该程序没有达到'if'语句和进一步。请帮忙。

+1

你确定它不是?在上一次结束之前放置一条调试线。 – mmmmmpie 2014-10-10 14:21:23

+0

我们如何放置调试线。 – 2014-10-10 14:51:18

+0

我的回答编辑 – Rika 2014-10-10 15:16:37

回答

1

就像这里说的Printing the value of a variable in SQL Developer,如果您使用的是SQL Developer,则必须打开VIEW _> DBMS_OUTPUT,然后单击绿色加号以启用输出。这适用于我的电脑,它以前不工作,但正在做你现在正在做的事情。现在,你的代码做我的电脑上的精品工程,我得到的输出:

Fail 
Invalid Input 
percentage is10 

对于SQL_Plus

集SERVEROUTPUT上

做两件事情:

1)告诉SQLPLUS到在每个语句后转储输出 2)它使得sqlplus发出dbms_output.enable

编辑:你的问题的第二个输入其实很好

Fail 
grade c 
percentage is41.25 
+0

我忘了将serveroutput设置为开。谢谢 – 2014-10-10 15:18:01

+0

@TejasTamkahne没问题,你的输入很好,应该为你输入的第二个输入获得C级。 – Rika 2014-10-10 15:21:16