我的 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 块有啥问题?的主要内容,如果未能解决你的问题,请参考以下文章
oracle 的 PL/SQL 中的 & 和 : 有啥区别?