日期:2014-05-17  浏览次数:20814 次

请教关于存储过程编程中查询并赋值的问题
SQL code
create or replace procedure peoplegrade(sname in char,
                                        cname in char,
                                        grade in smallint) is
  ssno char;
  ccno char;
begin

 select sno into ssno from student where student.sname = sname;
  select cno into ccno from sgcourse where sgcourse.cname = cname;

这段代码是整个代码的一部分,这部分要想实现传入三个参数,分别是学生姓名,科目名称和成绩,在开始在student表中查询姓名等于传入姓名的学生学号并且赋予ssno变量,下面一条为差不多的。在这里,学生姓名已经假设不重复。可是单步调试运行到第一段select代码时会报错,说实际返回的行数超出请求行数,请问怎样修改才能实现目标,谢谢了

------解决方案--------------------
传入参数名不要与字段名相同
否则这里的sql语句会将该名称解析成表中的字段,而不是绑定变量
将sname和cname这两个参数名改成别的名称
------解决方案--------------------
ssno char;
ccno char;
这两个临时变量也最好指定长度,否则为char(1),很容易出现长度过小的错误
如果不是定长的可以改成varchar2(n)类型
传入参数也改成in varchar2
------解决方案--------------------
探讨
SQL code
create or replace procedure peoplegrade(sname in char,
cname in char,
grade in smallint) is
ssno char;
……