declare
date0 VARCHAR2(50);
date1 VARCHAR2(50);
date2 VARCHAR2(50);
date3 VARCHAR2(50);
begin
date0:='2011-12-05';--改成需要结转月份内任何一天
date1:=substr(date0,1,7)||'-01';
date2:=substr(date0,1,7)||'-31';
date3:=TO_CHAR(add_months(TO_DATE(date1,'YYYY-MM-DD'),1),'YYYY-MM')||'-00';
delete xbf_qc_lsz where dbizdate=date3;
insert into xbf_qc_lsz
(select 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,sum(ninnum) as ninnum--入库数量
,sum(noutnum) as  noutnum--出库数量
from 
(
select 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,nvl(ninnum,0) as ninnum--入库数量
,nvl(noutnum,0) as noutnum--出库数量
from view_ic_general_sfc_h 
where dbizdate>(select nvl(max(dbizdate),' ') from view_xbf_qc_lsz where dbizdate<date1) and dbizdate<=date2UNION ALLselect 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,nvl(ninnum,0) as ninnum--入库数量
,nvl(noutnum,0) as noutnum--出库数量
from view_xbf_qc_lsz
where dbizdate=(select nvl(max(dbizdate),' ') from view_xbf_qc_lsz where dbizdate<date1)
)
group by 
pk_corp --公司编号
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
);
end;直接用上面这段代码在PLSQL中能执行成功
用下面这个建成存储过程后,执行就不行
提示  invalid sql statement
--exec  pinto_qc_lsz('2011-12-31');
create or replace procedure pinto_qc_lsz(date0 in VARCHAR2) 
is
date1 VARCHAR2;
date2 VARCHAR2;
date3 VARCHAR2;
begin
date1:=substr(date0,1,7)||'-01';
date2:=substr(date0,1,7)||'-31';
date3:=TO_CHAR(add_months(TO_DATE(date1,'YYYY-MM-DD'),1),'YYYY-MM')||'-00';
delete xbf_qc_lsz where dbizdate=date3;
insert into xbf_qc_lsz
(select 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,sum(ninnum) as ninnum--入库数量
,sum(noutnum) as  noutnum--出库数量
from 
(
select 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,nvl(ninnum,0) as ninnum--入库数量
,nvl(noutnum,0) as noutnum--出库数量
from view_ic_general_sfc_h
where dbizdate>(select nvl(max(dbizdate),' ') from view_xbf_qc_lsz where dbizdate<date1) and dbizdate<=date2UNION ALLselect 
 pk_corp --公司编号
,date3 as dbizdate--出入库日期
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
,nvl(ninnum,0) as ninnum--入库数量
,nvl(noutnum,0) as noutnum--出库数量
from view_xbf_qc_lsz
where dbizdate=(select nvl(max(dbizdate),' ') from view_xbf_qc_lsz where dbizdate<date1)
)
group by 
pk_corp --公司编号
,cwarehouseid_pk --仓库PK
, pk_calbody_pk --库存组织PK
, cbilltypecode_pk--单据类型PK
, cdispatcherid_pk--收发类别PK
,cinvbasid_pk--存货PK
,cspaceid_pk --货位PK
,vuserdef18 --海关型号
,vuserdef19 --手册号
,vuserdef20  --研发名称
,invclasscode --存货分类
,vfree5 --等级
,vbatchcode --批次号
);end pinto_qc_lsz;

解决方案 »

  1.   

    编译已经成功,存储过程也建好了
    调用的时候报错exec  pinto_qc_lsz('2011-12-31');
      

  2.   

    执行exec  pinto_qc_lsz('2011-12-05')试试,还有把报错信息发出来看看。
      

  3.   

    报得就是提示 invalid sql statement
      

  4.   

    这样试一下:begin pinto_qc_lsz('2011-12-31'); end; 
      

  5.   

    exception
    rollback;
        DBMS_OUTPUT.PUT_LINE(V_SQL);     
      

  6.   

    去下个脚本做调试吧!http://download.csdn.net/detail/serisboy/4192687
      

  7.   

    提示
    line 1, column 7;
    object PINTO_QC_LSZ is invalid
    PL/SQL: Statement ignored
      

  8.   


    积分不足,烦请发到 [email protected]谢谢
      

  9.   

    你把存储过程里面的sql粘出来,然后放到plsql里面,加上参数执行一下试试。
      

  10.   

    你是在SQL WINDOW执行吗?那可不行,得在Command Window执行。