目前学存储过程
想实现从一个拥有学生成绩的表中 查出不及格的学生学号 再放到一个新的表中
成绩表的代码 ()
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);
就行了,估计你写的时候粗心了。