create or replace procedure sys.pro_hd_get_CRP_returnByYear
(
   p_out_iReturn out number,
   p_dDate in date
)
is
/*传入年份  获取该年份里面每个月退赔数量*/
beginSELECT
count(*) into
p_out_iReturn
FROM
 system.hd_inventory a
WHERE
 a.dSales=to_char(p_dDate,'yyyy');
end pro_hd_get_CRP_returnByYear;请问一下 上面的存储过程已经可以成功编译,但是我在Test的时候输入年份就报错,怎么回事啊?
我现在想按照输入的年份来执行查询  比如输入2008就出来2008年的数据。

解决方案 »

  1.   


    需要这么用:
    CREATE OR REPLACE PROCEDURE  PRO_HD_GET_CRP_RETURNBYYEAR(P_OUT_IRETURN OUT NUMBER,
                                                                P_DDATE       IN DATE) IS
      /*传入年份  获取该年份里面每个月退赔数量*/
    BEGIN
      SELECT COUNT(*)
        INTO P_OUT_IRETURN
        FROM scott.emp A
       WHERE to_char(a.hiredate,'yyyy') = TO_CHAR(P_DDATE, 'yyyy');
    END PRO_HD_GET_CRP_RETURNBYYEAR;
    /DECLARE
     l_i NUMBER;
    BEGIN
     PRO_HD_GET_CRP_RETURNBYYEAR(l_i,to_date('1981','yyyy'));
     dbms_output.put_line(l_i);
    END;
    /输出:
    10
      

  2.   

    或者在调用时要输入完整的日期,
    比如:exec sys.pro_hd_get_CRP_returnByYear(:v_out,'2008-01-01 10:10:12')