为了账号安全,请及时绑定邮箱和手机立即绑定

大家来找茬,运行报错!为啥?求指导!

在行: 2 上开始执行命令时出错 -
DECLARE
--系的光标
cursor cdept is select dno,dname from dep;
pdno dep.dno%type;
pdname dep.dname%type;
--成绩光标
cursor cgrade(coursename varchar2,depno number)  is  select  grade from sc where cno=(select cno from course where cname=coursename)
                and sno in (select sno from student where dno=depno);
               
      pgrade sc.grade%type;
      count1 number;
      count2 number;
      count3 number;

    avggrade number;
      pcourseName varchar2 := '大学物理';
     
    begin  
    open cdept;
    loop
    --取一个系的信息
              fetch cdept into pdno,pdname;
    exit when cdept %notfound;
    --初始化工作
    count1:=0;count2:=0;count3:=0;
   
    --系的平均成绩
    select avg(grade) into avggrade from sc where cno=(select cno from course where cname=pcoursename)
                and sno in (select sno from student where dno=pdno);
                --取系中,选修了大学物理的学生成绩
      open cgrade(pcoursename,pdno);
      loop
      fetch cgrade into pgrade;
      exit when cgrade%notfound;
      if pgrade < 60 then count1:=count1+1;
      elsif pgrade >=60 and pgrade <85 then count2:=count2+1;
    else count3:=count3+1;
    end if;
     
      end loop;
     
      close cgrade;
    insert into msg1 values ( pcoursename,pdname,count1,count2,count3,avggrade);
   
   
    end loop;
   
    close cdept;
   
    COMMIT;
    dbms_output.put_line('统计完成');
    end ;
     
     
错误报告 -
ORA-06550: 第 16 行, 第 19 列:
PLS-00215: 字符串长度限制在范围 (1...32767)
06550. 00000 -  "line %s, column %s:\n%s"
*Cause:    Usually a PL/SQL compilation error.
*Action:

正在回答

3 回答

pcoursename 需要指定长度~~

0 回复 有任何疑惑可以回复我~

varchar2,如果在pl/sql中它是以输入或输出参数的长度为准,如果在SQL中(比如创建表时)它是不允许不指定长度的. 所以 老师在视频中没有设定长度编译也可以通过

0 回复 有任何疑惑可以回复我~

cursor cgrade(coursename varchar2,depno number)  

为什么 这个varchar2  可以不指定长度 ,不太明白 求解答

0 回复 有任何疑惑可以回复我~
#1

EL_PSY_CONGROO

在cursor中的形参可以只声明参数类型,而不设置数据类型的长度,如果是在单独声明变量的时候则一定要设置数据类型的长度。
2015-10-31 回复 有任何疑惑可以回复我~
#2

码农_鑫森淼焱垚

楼上正解...老师这里也出现一点问题 pcourseName varchar2 := '大学物理'; 这里要定义类型长度 pcourseName varchar2(10) := '大学物理';
2015-11-18 回复 有任何疑惑可以回复我~
#3

I振哥哥

很奇怪老师视频当中声明pcourseName时,并没有制定数据的长度,为什么编译通过?另,一楼说的一定要设置数据类型的长度也有点不妥,视频中明明很多其他类型的没有设置长度,照样可以通过。
2015-11-25 回复 有任何疑惑可以回复我~
#4

I振哥哥 回复 I振哥哥

当语言环境为中文(SIMPLIFIED CHINESE_CHINA.ZHS16GBK)时,一个VARCHAR2(200)的数据列可以保存200个英文字符或者100个汉字字符。
2015-11-25 回复 有任何疑惑可以回复我~
#5

I振哥哥 回复 I振哥哥

varchar2 声明方式如下VARCHAR2(L),L为字符串长度,没有缺省值,作为变量最大32767个字节,作为数据存储在ORACLE8中最大为4000
2015-11-25 回复 有任何疑惑可以回复我~
#6

稳坐钓鱼台

请好好看一下视频,老师在编译之前已经将这个pcourseName varchar2(20) := '大学物理';长度改过来了
2016-02-29 回复 有任何疑惑可以回复我~
查看3条回复

举报

0/150
提交
取消

大家来找茬,运行报错!为啥?求指导!

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信