Oracle存储过程,SELECT

时间:2018-05-02 18:05:30

标签: database oracle stored-procedures

我正在尝试创建过程,它显示两个日期之间的事件,而我的代码则编译。在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;

1 个答案:

答案 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中相当复杂。这不适合没有经验的人。