我写了一个包,里面有一个过程,编译也通过了,但是在调用时报PLS-00306:wrong number or types of arguments in call to 'PUT_LINE',我在百度上找了很久都不知道怎么改,不知道如何入手,请大家帮忙指点下吧
这是我的调用写的程序块
set serveroutput on  
declare   
  o_query VF_P_QUREY_OID.refcurosr;   
begin   
VF_P_QUREY_OID.VF_QUREY_OID('1000000','2008-01-1','2008-01-31',o_query1);   
  --显示过程VF_QUREY_OID的查询结果。   
  dbms_output.put_line(o_query1 ); 
end;
大帮忙看下我的调用方法哪里出错了,我把我的包的包头和包体源码发上来:
  --根据机构查询,建立VF_P_QUREY_OID包实现数据集返回
--根据机构查询,建立VF_QUREY_OID过程查询数据
create or replace package VF_P_QUREY_OID IS--包头
 
  type refcurosr is ref cursor;
       --下面是有四个参数的过程
  procedure VF_QUREY_OID(o_id in varchar2,--机构号
                         begin_time in varchar2,--起始日期
                         end_time in varchar2,--终止日期
                         o_query out refcurosr);--返回的数据集end VF_P_QUREY_OID; 
 
 /
 
 CREATE OR REPLACE PACKAGE BODY VF_P_QUREY_OID IS--包体
 --下面是有四个参数的过程 PROCEDURE VF_QUREY_OID(o_id in VARCHAR2,--机构号
                            begin_time in VARCHAR2,--起始日期
                            end_time in VARCHAR2,--终止日期
                            o_query out refcurosr) IS--返回的数据集
 cursor C_TEMP is select class_id from lu_organ where organ_id=o_id;--把Class_id放入C_temp游标
 X C_TEMP%rowtype;--用来判断的变量 
BEGIN
OPEN C_TEMP;
FETCH C_TEMP into X;
IF X.CLASS_ID=1  --当class_id=1时
THEN
 OPEN o_query FOR select b.branch_name, --查询开始,我的业务逻辑,单独的Select没有错
     sum(decode(POLICY_YEAR,1,ACCEPT_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,ACCEPT_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,MANAGE_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,MANAGE_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,FETCH_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,FETCH_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,CHANGED_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,CHANGED_AMOUNT,0)), 
     (sum(decode(POLICY_YEAR,1,ENC_COMM_AMOUNT,0))+sum(decode(sign(POLICY_YEAR-1),1,DR_COMM_AMOUNT,0))) 
 from VF_ACCEPT_AMOUNT a,lu_organ b  
 where a.organ_id=b.organ_id 
 and trunc(a.finish_time) >=trunc(to_date(begin_time,'yyyy-mm-dd'))--起始日期
and trunc(a.finish_time) <=trunc(to_date(end_time,'yyyy-mm-dd')) --终止日期
 and a.PERIOD_TYPE=3 
 and b.spot_code in( select spot_code from lu_organ 
                      where stem_code in(select stem_code from lu_organ 
                                        where branch_code in (select branch_code from lu_organ where head_id in(SELECT HEAD_ID from lu_organ 
                                                          where organ_id=o_id)) and branch_code is not null) and stem_code is not null)
group by  b.branch_name;
 
 
 ELSIF X.CLASS_ID=2 --当class_id=2时
 THEN
 OPEN o_query FOR select b.stem_name,--用O_id来查询所要的数据放到refcurosr中,
     sum(decode(POLICY_YEAR,1,ACCEPT_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,ACCEPT_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,MANAGE_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,MANAGE_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,FETCH_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,FETCH_AMOUNT,0)),
     sum(decode(POLICY_YEAR,1,CHANGED_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,CHANGED_AMOUNT,0)), 
     (sum(decode(POLICY_YEAR,1,ENC_COMM_AMOUNT,0))+sum(decode(sign(POLICY_YEAR-1),1,DR_COMM_AMOUNT,0))) 
 from VF_ACCEPT_AMOUNT a,lu_organ b  
 where a.organ_id=b.organ_id 
 and trunc(a.finish_time) >=trunc(to_date(begin_time,'yyyy-mm-dd'))
and trunc(a.finish_time) <=trunc(to_date(end_time,'yyyy-mm-dd')) 
 and a.PERIOD_TYPE=3 
 and b.spot_CODE in( select spot_CODE from lu_organ 
                      where stem_CODE in (select stem_CODE from lu_organ 
                                        where branch_code=(select branch_code from lu_organ 
                                                          where organ_id=o_id) and branch_code is not null))
group by  b.stem_name,b.spot_code;ELSIF X.CLASS_ID=3  --当class_id=3时
THEN
OPEN o_query FOR select b.spot_name,
sum(decode(POLICY_YEAR,1,ACCEPT_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,ACCEPT_AMOUNT,0)),
sum(decode(POLICY_YEAR,1,MANAGE_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,MANAGE_AMOUNT,0)),
 sum(decode(POLICY_YEAR,1,FETCH_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,FETCH_AMOUNT,0)),
 sum(decode(POLICY_YEAR,1,CHANGED_AMOUNT,0)),sum(decode(sign(POLICY_YEAR-1),1,CHANGED_AMOUNT,0)), 
 (sum(decode(POLICY_YEAR,1,ENC_COMM_AMOUNT,0))+sum(decode(sign(POLICY_YEAR-1),1,DR_COMM_AMOUNT,0))) 
 from VF_ACCEPT_AMOUNT a,lu_organ b  
 where a.organ_id=b.organ_id 
 and a.PERIOD_TYPE=3 
 and trunc(a.finish_time) >=trunc(to_date(begin_time,'yyyy-mm-dd'))
and trunc(a.finish_time) <=trunc(to_date(end_time,'yyyy-mm-dd')) 
 and b.spot_CODE in( select spot_code  from lu_organ 
                      where stem_code  in ( select stem_code from lu_organ 
                       where organ_id=o_id ) and spot_code is not null)
group by  b.spot_name; 
END IF;
close C_TEMP;
END VF_QUREY_OID;
END VF_P_QUREY_OID;

解决方案 »

  1.   

    dbms_output.put_line(o_query1 );  
    错误是说,你在调put_line的时候给的参数类型有问题,
    貌似o_query1你这个变量名称写错了,你上面好象只有o_query
      

  2.   

    那个1是我不小心贴上来时删掉的,
    set serveroutput on   
    declare    
      o_query1 VF_P_QUREY_OID.refcurosr;    
    begin    
    VF_P_QUREY_OID.VF_QUREY_OID('1000000','2008-01-1','2008-01-31',o_query1);    
      --显示过程VF_QUREY_OID的查询结果。    
      dbms_output.put_line(o_query1 );  
    end; 
    这是我的执行语句