我制作了如下的Oracle软件包。
我将传递参数字符串,如'2014-11-05'。
--SEARCH 2014 11 04
FUNCTION SEARCHMYPAGE(v_created_after IN DATE, v_created_before IN DATE)
return CURSORTYPE is rtn_cursor CURSORTYPE;
BEGIN
OPEN
rtn_cursor FOR
select
news_id
from
(
select
news_id,
news_title, news_desc,
created, news_cd
from
news
)
where
1=1
AND (created BETWEEN decode(v_created_after, '', to_date('2000-01-01', 'YYYY-MM-DD'), to_date(v_created_after, 'YYYY-MM-DD'))
AND (decode(v_created_before, '', sysdate, to_date(v_created_before, 'YYYY-MM-DD')) + 0.999999));
return rtn_cursor ;
END SEARCHMYPAGE;
我在Eclipse控制台Message中确认了我的参数,因为我正在使用Eclipse IDE。 我的内容是在2014-10-29~2014-10-31制作的。
当我将'2014-11-01'作为created_after传递时,它返回0条记录。(但我期望所有内容,因为每个内容都在10-29到10-31之间制作)
你会发现我的功能有什么问题吗?
谢谢:D
答案 0 :(得分:1)
create function search_my_page(p_created_after in date, p_created_before in date)
return cursortype
is rtn_cursor cursortype;
begin
open rtn_cursor for
select news_id
from news
where created between
nvl(v_created_after, date '1234-01-01')
and
nvl(v_created_before, sysdate) + interval '1' day - interval '1' second;
return rtn_cursor;
end search_my_page;
/
的变化: