如果我这帖子发错地方了,本应归属“基础和管理”的,还望见谅!
   在存储过程中,我定义了一个变量,而它的值满足两条件:1、处于一日期段内;2、它的day=15;
   (declare last_balance_date date;
条件一:     ADD_MONTH(begin_date,-1)<= last_balance_date < begin_date;
条件二:     EXTRACT(day from last_balance_date) = '15';
    )
   我想是否能通过定义函数或者集合来实现,再到存储过程中调用一把。
   可怜在下懂得实在太少,而事又急,只能上来求助各位看官了,先谢谢了!

解决方案 »

  1.   

    PROCEDURE P_LAST_BALANCE_DATE(
        pbegin_date                          in out date
      )
    is
        vday                                  number;                                               
               
    begin
         
        select EXTRACT(day from pbegin_date) into vday from dual;
        if vday>15 then
           pbegin_date:=to_date(to_char(pbegin_date,'yyyymm') || '15');
        else
           pbegin_date:=to_date(to_char(ADD_MONTHS(pbegin_date,-1),'yyyymm') || '15');
        end if;
    end P_last_balance_date;
      

  2.   

    根据你的两个条件,是否可以这么理解,
    这个日期变量last_balance_date的值是begin_date所在月或上个月的“15”号?
    trunc(last_balance_date ,'dd') 
    in 
    (trunc(begin_date)+15,add_months(trunc(begin_date),-1)+15)
      

  3.   

    先谢谢楼上,再就是抱歉了,看了楼上帮忙的,我才知道有些我还没说清楚。
    to waterfirer(水清):
        begin_date 是我存储过程的一个参数,而并不存在于具体一个表中;同时,在这个存储过程中,我同时要用到这个begin_date和last_balance_date。有什么我没理解进去的,还请见谅。
    to  njhart2003():
        嘿嘿,容我再问个BC吧,那我还如何得到这个last_balance_date,或者说我该如何给它赋值呢?具体语句(格式)是? 如果这里的‘15’换成字段‘FCD_DAY’应该也可以吧,我这里的‘FCD_DAY’还得根据条件从表中选出来呢,挺罗嗦的!
      

  4.   

    是不是last_balance_date要满足那两个条件啊?
    我写的那个就是你把存储过程中的begin_date作为参数调用我那个存储过程,返回值就是你要的last_balance_date,然后继续你的存储过程。如果15不是固定的,那就把P_LAST_BALANCE_DATE改一改,加一个参数就行了。其实那一段可以放到你自己的存储过程中的。
      

  5.   

    to waterfirer(水清):抱歉,刚才回得太匆忙了些,我上一楼对你说的都不是问题,我都已经按照你那种思路做了些转换,能实现了,n*thank you!
      

  6.   

    还有个更简单的:
    SQL> select trunc(sysdate,'dd') begin_date,trunc(sysdate-14,'mm')+14 last_balance_date from dual;BEGIN_DATE  LAST_BALANCE_DATE
    ----------- -----------------
    2005-8-24   2005-8-15Executed in 0.016 secondsSQL> select trunc(sysdate-10,'dd') begin_date,trunc(sysdate-10-14,'mm')+14 last_balance_date from dual;BEGIN_DATE  LAST_BALANCE_DATE
    ----------- -----------------
    2005-8-14   2005-7-15Executed in 0.016 secondsSQL>