如何在Oracle中编写包含多个表项的过程

如何在Oracle中编写包含多个表项的过程,oracle,plsql,Oracle,Plsql,我使用了以下代码 CREATE PROCEDURE get_details ( start_time IN DATE, End_Time IN DATE, o_results1 OUT SYS_REFCURSOR, o_results2 OUT SYS_REFCURSOR, o_results3 OUT SYS_REFCURSOR ) AS BEGIN OPEN o_results1 FOR SELECT * FROM Table1 WHERE

我使用了以下代码

CREATE PROCEDURE get_details (
  start_time IN  DATE,
  End_Time   IN  DATE,
  o_results1 OUT SYS_REFCURSOR,
  o_results2 OUT SYS_REFCURSOR,
  o_results3 OUT SYS_REFCURSOR
)
AS
BEGIN
  OPEN o_results1 FOR
  SELECT *
  FROM   Table1
  WHERE  date_time BETEWEEN start_time AND End_Time;

  OPEN o_results2 FOR
  SELECT *
  FROM   Table2
  WHERE  date_time BETEWEEN start_time AND End_Time;

  OPEN o_results3 FOR
  SELECT *
  FROM   Table3
  WHERE  date_time BETEWEEN start_time AND End_Time;
END;
/
在执行以下操作时:

VARIABLE o_result1 REFCURSOR; 
VARIABLE o_result2 REFCURSOR; 
VARIABLE o_result3 REFCURSOR; 
EXECUTE get_details( TO_DATE('15-Jul-15 04:00:10', 'DD-MON-YYYY HH24:MI:SS'), TO_DATE('15-Jul-15 20:14:16', 'DD-MON-YYYY HH24:MI:SS'), :o_result1, :o_result2, :o_result3 );
我没有得到价值观。最后,我始终没有选择任何行
打印o_结果1或任何其他变量打印

我需要打印三个表中的开始时间和结束时间之间的值,这三个表将日期\时间作为公共字段。 我做错了什么

您的输入错误

它必须是这样的

TO_DATE('15-Jul-2015 04:00:10', 'DD-MON-YYYY HH24:MI:SS')
'15','YYYY'
将被解释为
0015
。不是2015年

它必须是
'15','RR'
'2015','YYYY'

RR
将与本世纪相关

最后一个问题是

EXECUTE get_details(
              TO_DATE('15-Jul-15 04:00:10', 'DD-MON-RR HH24:MI:SS'), 
              TO_DATE('15-Jul-15 20:14:16', 'DD-MON-RR HH24:MI:SS'), 
              :o_result1,
              :o_result2,
              :o_result3 );

祝贺你重新发明了千年虫。一年应该是4位数
YYYY
。什么是
99
?是
1999
还是
2099
?是否有办法编辑我获得的信息并仅显示不为空的字段?比如说,我只需要两个字段。如果两者都为null,那么我根本不想显示该行。唯一的方法是在
where
子句中过滤掉它。示例
选择coalesce(col1,col2)作为mycl,其中col1不为null,col2不为null
Coalesce
实际上会返回传递给它的第一个NOTNULL值。好的,这个怎么样。如果其中一个表没有返回任何内容,是否有打印方法。假设表2在时间段之间没有结果,有没有办法显示出来?是的,在返回游标之前,您必须检查数据是否存在<代码>在值中选择“Y”\u exists from dual where exists()
。现在,您知道是否打开光标。。