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

为什么这段 代码执行会报错呢


在行: 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(3):='大学物理';

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-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小

ORA-06512: 在 line 13

06502. 00000 -  "PL/SQL: numeric or value error%s"

*Cause:    An arithmetic, numeric, string, conversion, or constraint error

           occurred. For example, this error occurs if an attempt is made to

           assign the value NULL to a variable declared NOT NULL, or if an

           attempt is made to assign an integer larger than 99 to a variable

           declared NUMBER(2).

*Action:   Change the data, how it is manipulated, or how it is declared so

           that values do not violate constraints.


在行: 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: 第 13 行, 第 21 列: 

PLS-00215: 字符串长度限制在范围 (1...32767)

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:


在行: 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(20));

    end loop;


    close cdept;

    commit;

    DBMS_OUTPUT.PUT_LINE('统计完成');

end;

错误报告 -

ORA-06550: 第 13 行, 第 21 列: 

PLS-00215: 字符串长度限制在范围 (1...32767)

ORA-06550: 第 32 行, 第 78 列: 

PLS-00222: 在此范围中不存在名为 'AVGGRADE' 的函数

ORA-06550: 第 32 行, 第 78 列: 

PL/SQL: ORA-00904: : 标识符无效

ORA-06550: 第 32 行, 第 13 列: 

PL/SQL: SQL Statement ignored

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:


在行: 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: 第 13 行, 第 21 列: 

PLS-00215: 字符串长度限制在范围 (1...32767)

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:


在行: 14 上开始执行命令时出错 -

pcourseName

错误报告 -

未知的命令



在行: 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: 第 13 行, 第 21 列: 

PLS-00215: 字符串长度限制在范围 (1...32767)

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:


正在回答

1 回答

错误报告 -

ORA-06550: 第 13 行, 第 21 列: 

PLS-00215: 字符串长度限制在范围 (1...32767)

06550. 00000 -  "line %s, column %s:\n%s"

*Cause:    Usually a PL/SQL compilation error.

*Action:


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

WestBrook_wyf

pcourseName VARCHAR2(20):='大学物理'; 在Oracle中执行存储过程时,输出参数的长度要与原表中字段长度一致! 在刚开始创建msg1表的时候,我们的coursename就是varchar2(20).
2018-10-09 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么这段 代码执行会报错呢

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