我正在尝试创建过程,它显示两个日期之间的事件,而我的代码则编译。在cmd提示中,SELECT公式有效,但这里doesen不想。我是Oracle数据库的新手,这里是代码:
create or replace PROCEDURE SHOW_EVENTS
(
SINCE IN DATE
, TTO IN DATE
) AS
BEGIN
SELECT * FROM events
WHERE EVENT_DATE BETWEEN TO_DATE(SINCE,'dd/mm/yyyy') AND TO_DATE(TTO,'dd/mm/yyyy')
END SHOW_EVENTS;
答案 0 :(得分:2)
您有多个问题。首先,查询应该是:
SELECT e.*
FROM events e
WHERE e.EVENT_DATE BETWEEN SINCE AND TTO;
将日期转换为日期是没有理由的。唯一可能的原因是如果您想将日期截断到最近的一天(因为Oracle日期有时间组件)。这样做更好:
SELECT e.*
FROM events e
WHERE e.EVENT_DATE BETWEEN trunc(SINCE) AND trunc(TTO);
更重要的是,你不能(轻松)做你想做的事。不使用存储过程,因为它们不返回结果集。没有视图,因为它们没有参数化。不容易使用函数 - 编写函数返回"表"在Oracle中相当复杂。这不适合没有经验的人。