请高手帮我小看下一下PL/SQL存储过程

来源:百度知道 编辑:UC知道 时间:2024/05/10 15:53:34
我写了一个存储过程
create or replace PROCEDURE SHOW_STUDENT_MSG(
sno in char,
coursename out char,
score out number)
is
BEGIN
select course.COURSE_NAME, choice.SCORE
into coursename, score
FROM choice, course, student where choice.S_NO = student.S_NO and
choice.COURSE_NO = course.COURSE_NO and student.S_NO = sno;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('你需要的数据不存在!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生其它错误!');
END SHOW_STUDENT_MSG;
/
然后
输入:
set serveroutput on;

DECLARE
c char(10);
s number(5,1);
BEGIN
SHOW_STUDENT_MSG('020201', c, s);
DBMS_OUTPUT.PUT_LINE('课程名:'||c||',课程成绩:'||s);
END;
/
却出现:
发生其它错误!
课程名:计算机文化,课程成绩:86
请人帮看下可能哪出了点小问题
也许语句上没什么问题 我不知道是忽略了什么 错误情况那么多 这种出错的细节大家能看出来就说下吧 不行的话在下先谢谢了

这么简单的错误都看不出来?

select course.COURSE_NAME, choice.SCORE
into coursename, score

这里 查出来的数据要是不只一个 怎么办?就会抛出EXCEPTION
然后
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('发生其它错误!');
于是你就输出 '发生其它错误!' 这句话了。
怎么解决呢?保证你的输出只有一个记录就行了 可以在语句后边添加 where rowid<=1 确保只有一行

我试验了下 没有出现问题。。。

有可能把你的出错信息发出来。 我看了一下,就愈发上来看,应该没有问题,但是这里忽略了2点
1 不知道你的表和数据什么样的,
2 设置上的问题。

你这样, 把错误信息发出来,最好包括错误代码,我们可以一起研究一下。
如果想要讨论,我们可以加下qq : 158669885

请发到问题补充里 。