当前位置: 代码迷 >> Oracle管理 >> 生手关于PLSQL的两道基础题
  详细解决方案

生手关于PLSQL的两道基础题

热度:265   发布时间:2016-04-24 04:03:34.0
新手关于PLSQL的两道基础题
目前学存储过程
想实现从一个拥有学生成绩的表中 查出不及格的学生学号 再放到一个新的表中
成绩表的代码 ()
create table score(
  sno char(15), --学生的学号
  cno char(8), -- 课程号
  period char(20),
  grade number(5,2), -- 成绩
  primary key(sno,cno,period),
  constraint fk_sc1 foreign key(sno) references student(sno),
  constraint fk_sc2 foreign key(cno) references course(cno),
  constraint ck_sc1 check (grade between 0 and 100)
  )

我做的代码
--notpass 为张新的表仅仅放不及格学生的学号
create or REPLACE procedure stu_sno
(v_cno in score.cno% TYPE)
AS
cursor cur_sno is 
select sno FROM score WHERE grade<60 and cno=v_cno;
no_pass cur_sno%rowtype;
BEGIN
if not cur_sno%isopen THEN
  open cur_sno;
  end if;
  loop
  FETCH cur_sno INTO no_pass;
    EXIT when cur_sno%notfound;
    dbms_output.put_line('不及格学号:'|| no_pass.sno);
    INSERT into notpass values(notpasss.sno);
  end loop;
  CLOSE cur_sno;
end;
但是我现在要是用这个过程时就出现
PLS-00201: 必须声明标识符 'V_CNO'
不知道问题出在哪里 ,
求各位大神帮帮忙
------解决思路----------------------
 INSERT into notpass values(notpasss.sno);
notpasss.sno?打错了吧

v_cno没有问题
------解决思路----------------------
改成:
create or REPLACE procedure stu_sno
(v_cno in varchar2)
AS
------解决思路----------------------
我试了一下你的代码:如下有问题:
INSERT into notpass values(notpasss.sno);
需要把其改为:
 INSERT into notpass values(no_pass.sno);
就行了,估计你写的时候粗心了。

  相关解决方案