我的 PL/SQL 块有啥问题?

Posted

技术标签:

【中文标题】我的 PL/SQL 块有啥问题?【英文标题】:What is wrong with my PL/SQL block?我的 PL/SQL 块有什么问题? 【发布时间】:2014-10-10 14:18:12 【问题描述】:

我写了一个程序来计算学生的平均分:

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】:

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

Fail
Invalid Input
percentage is10

对于 SQL_Plus

设置服务器输出

做两件事:

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

编辑:您的问题的第二个输入实际上很好

Fail
grade c
percentage is41.25

【讨论】:

我忘记将服务器输出设置为开启。谢谢 @TejasTamkahne 没问题,你的输入很好,你第二次输入应该得到 C 级。

以上是关于我的 PL/SQL 块有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章

JDBC + PL/SQL = 这么简单,还是有啥陷阱?

这个 PL/SQL 函数有啥问题?

这个 PL/SQL 有啥问题?绑定变量 * 未声明

oracle 的 PL/SQL 中的 & 和 : 有啥区别?

SQL 'select' 和 PL/SQL 'select' 语句有啥区别?

我在 PL SQL 中的 CASE 语句有啥问题?