+ -
当前位置:首页 → 问答吧 → oracle 写存储过程 没有足够的值?

oracle 写存储过程 没有足够的值?

时间:2011-11-04

来源:互联网

题目是:输入学生编号,将学生的所有课程成绩打印出来
用到的表 student 学生表
  course 课程表
  grade 成绩表
过程如下:
create or replace procedure my_pro
(param1 in number)
as
info_stu varchar2(10000);
begin
select s.stuname,c.couname,g.grade into info_stu from student s,course c,grade g
where s.stuid=g.stuid and c.couid=g.couid and g.stuid = param1;
dbms_output.put_line(info_stu);
end;




oracle 报出没有足够的值 请问是哪里的问题呢? 语法逻辑已经测试没错。是不是查出来的值 放进INFO_STU类型错误 怎么设置变量呢

作者: gosuperhao   发布时间: 2011-11-04

g.stuid =: param1;

作者: SKY_4K_PPM   发布时间: 2011-11-04

s.stuname,c.couname,g.grade into info_stu  
是这里的问题,你可以写两个查询语句,第一个得到info_stu,第二个关联查询

作者: m540920181   发布时间: 2011-11-04

引用 2 楼 m540920181 的回复:
s.stuname,c.couname,g.grade into info_stu
是这里的问题,你可以写两个查询语句,第一个得到info_stu,第二个关联查询



求这行代码 详细解释 还是不太懂耶?

作者: gosuperhao   发布时间: 2011-11-04

select s.stuname,c.couname,g.grade into info_stu from student s,course c,grade g
where s.stuid=g.stuid and c.couid=g.couid and g.stuid = param1;
这句找出了三列的值,却只用了一个变量来接,所以报错。应该再定义两个变量来存放其他的列,如
select s.stuname,c.couname,g.grade into info_stu,v_couname,v_grade from student s,course c,grade g
where s.stuid=g.stuid and c.couid=g.couid and g.stuid = param1;

作者: tx2730   发布时间: 2011-11-04