如何在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()
。现在,您知道是否打开光标。。