create or replace procedure p_getdate
(
   i_date           IN      date,
   o_date1          OUT     varchar2,
   o_date2          OUT     varchar2
)
as
 v_year       varchar2(10);
 v_mont       varchar2(10);
begin
 v_year := to_char(i_date,'yyyy');
 v_mont := to_char(i_date,'mm');
 o_date1 := v_year || v_mont || '01';
if
 (to_char(i_date,'mm') = '12')
then
 o_date2 := v_year + 1 || '0101';
else
 o_date1 := v_year || (v_mont + 1) || '01';
end if;
 
end;

解决方案 »

  1.   

    楼上的大哥,如果入参是varchar2类型该怎么处理呢?
      

  2.   

    入参已经做了校验,肯定是date格式的但是类型须是varchar2的
      

  3.   

    to_date(varchar2, fmt)就可以拉
      

  4.   

    create or replace procedure p_getdate
    (
    p_date IN varchar2,
    p_sdate OUT varchar2,
    p_edate OUT varchar2
    )as
    begin
    select to_char(to_date(&cdate,'yyyymm'),'yyyymmdd') into p_sdate, 
           to_char(add_months(to_date(&cdate,'yyyymm'),1),'yyyymmdd') into p_edate
      from dual;
    end;
      

  5.   

    :( 写错了,应该是
    create or replace procedure p_getdate
    (
    p_date IN varchar2,
    p_sdate OUT varchar2,
    p_edate OUT varchar2
    )as
    begin
    select to_char(to_date(&cdate,'yyyymm'),'yyyymmdd'),
    to_char(add_months(to_date(&cdate,'yyyymm'),1),'yyyymmdd') into p_sdate,p_edate
    from dual;
    end;
      

  6.   

    create or replace procedure p_getdate
    (
       i_date           IN      varchar2,
       o_date1          OUT     varchar2,
       o_date2          OUT     varchar2
    )
    as
    begin
    o_date1 := i_date||'01';
    o_date2 := to_char(to_date(i_date,'yyyymm') + 32,'yyyymm')||'01'; 
    end;
      

  7.   

    to afic: + 32不能实现吧
      

  8.   

    :( 又忘记替换变量了
    create or replace procedure p_getdate
    (
    p_date IN varchar2,
    p_sdate OUT varchar2,
    p_edate OUT varchar2
    )as
    begin
    select to_char(to_date(p_date,'yyyymm'),'yyyymmdd'),
    to_char(add_months(to_date(p_date,'yyyymm'),1),'yyyymmdd') into p_sdate,p_edate
    from dual;        ------p_date 替换原来的输入变量&cdate
    end;
      

  9.   

    请问xiaoxiao1984(笨猫儿) 
    我通过执行你的过程怎么老出错
    提示:调用 'P_GETDATE' 时参数个数或类型错误