语句看以没有错语,但建义不要用goto标号.
-------------------------------------
select count(*) into nCount from 库存清理临时信息;
if nCount>0
then
open CUR1;
<<LABEL1>>
fetch CUR1 into ROW1;
insert into 厂家库存信息 (材料编号,厂家编号,厂家物资,库存数量,价格)
values (ROW1.材料编号,ROW1.厂家编号,CHJFLAGE,ROW1.库存数量,ROW1.价格);
nCount := nCount-1;
if nCount>0
then
goto LABEL1;
end if;
close CUR1;
end if;修改为:
for v_CUR in CUR1 loop
insert into 厂家库存信息 (材料编号,厂家编号,厂家物资,库存数量,价格)
values (v_CUR.材料编号,v_CUR.厂家编号,CHJFLAGE,v_CUR.库存数量,v_CUR.价格);
end loop;

解决方案 »

  1.   

    参数的声明中,要带IN 或 OUT来表明参数类型。
    “GRADE1 物资基本信息.一级分类%TYPE”
    修改成 “GRADE1 IN 物资基本信息.一级分类%TYPE”试试。
      

  2.   

    create procedure 库存物资清理
    (GRADE1 物资基本信息.一级分类%TYPE,GRADE2 物资基本信息.二级分类%TYPE,
    GRADE3 物资基本信息.三级分类%TYPE,GRADE4 物资基本信息.四级分类%TYPE,
    CHANGJIA 供应商基本信息.厂家名称%TYPE,CHJFLAGE 厂家库存信息.厂家物资%TYPE)
    as
    CURSOR CUR1 is select * from 库存清理临时信息;
    ROW1 库存清理临时信息%rowtype;
    nCount number;
    nCaiLiao number;
    nChangJia number;
    begin
    select 材料编号 into nCaiLiao from 物资基本信息 where 一级分类='||GRADE1||' and 二级分类='||GRADE2||' and 三级分类='||GRADE3||'
    and 四级分类='||GRADE4||';
    select 厂家编号 into nChangJia from 供应商基本信息 where 厂家名称='||CHANGJIA||';
    delete from 库存清理临时信息;
    insert into 库存清理临时信息 select 材料编号,厂家编号,价格,count(*) 记录数量,sum(库存数量) 库存数量
    from 厂家库存信息 where 材料编号='||nCaiLiao||' and 厂家编号='||nChangJia'|| and 厂家物资='||CHJFLAGE||'
    group by 材料编号,厂家编号,价格;
    delete from 厂家库存信息 where 材料编号='||nCaiLiao||' and 厂家编号='||nChangJia||' and 厂家物资='||CHJFLAGE||';
    select count(*) into nCount from 库存清理临时信息;
    if nCount>0
    then
    open CUR1;
    <<LABEL1>>
    fetch CUR1 into ROW1;
    insert into 厂家库存信息 (材料编号,厂家编号,厂家物资,库存数量,价格)
    values (ROW1.材料编号,ROW1.厂家编号,CHJFLAGE,ROW1.库存数量,ROW1.价格);
    nCount := nCount-1;
    if nCount>0
    then
    goto LABEL1;
    end if;
    close CUR1;
    end if;
    delete from 库存清理临时信息;
    end;
      

  3.   

    编译时报错,可以用show err显示出来(SQL*PLUS中).
      

  4.   

    jiezhi兄什么意思?这种用法很新颖啊,不过好象别扭了一点。
    我觉得好象是数据上的问题,建议加例外。
    比如select into语句选出来的记录唯一吗?
    另外最好加commit,不然delete 完又insert又delete,不知道
    中间发生了什么事情?!
    贴主把这段代码放在TOAD里面编译一下看到底那句出错,也好
    有的放矢。