gpt4 book ai didi

sql - 查询的开始和结束时间

转载 作者:行者123 更新时间:2023-12-03 23:49:08 24 4
gpt4 key购买 nike

作为存储过程要求的一部分,我需要提供特定子查询的开始和结束时间。例如,假设我的查询是:

SELECT  price
FROM vehicles
WHERE wheels < 3

我的存储过程的输出应该是一个指向如下表的 refcursor:

price  start_time          end_time
12000 2018-08-08 08:42:31 2018-08-08 08:42:52
130000 2018-08-08 08:42:31 2018-08-08 08:42:52
6000 2018-08-08 08:42:31 2018-08-08 08:42:52
3500 2018-08-08 08:42:31 2018-08-08 08:42:52

start_time 是我开始选择语句的时间,end_time 是它完成的时间。

我试过以下方法:

WITH start_time AS
( SELECT sysdate AS start_time
FROM dual
), main_query AS
( SELECT price
FROM vehicles
WHERE wheels < 3
), end_time AS
( SELECT sysdate AS end_time
FROM dual
)
SELECT main_query.*
, TO_CHAR(start_time, 'YYYY-MM-DD HH24:MI:SS') AS start_time
, TO_CHAR(end_time, 'YYYY-MM-DD HH24:MI:SS') AS end_time
FROM main_query
CROSS JOIN start_time
CROSS JOIN end_time
;

但是 start_time 和 end_time 说的是同一个时间。

我知道这是一个非常规(而且笨拙)的要求,但必须...

最佳答案

如果是程序的一部分,让它分两部分处理。首先我们获取数据,然后返回它。

我们创建一个对象来临时存储数据:

create type r_price_index as object (
price number(10,2));
create type t_price_index is table of r_price_index;

然后在你的程序中:

declare
v_price_index t_price_index;
v_t_stamp1 date;
v_t_stamp2 date;
v_cur sys_refcursor;
v_out sys_refcursor;

begin

v_t_stamp := sysdate; -- The start time

open v_cur for
SELECT price
FROM vehicles
WHERE wheels < 3;
fetch v_cure bulk collect into v_price_index; -- Store the data in the object
close v_cur;
v_t_stamp2 := sysdate; -- The end time

open v_out for -- Output the stored data
select price, v_t_stamp1 as s_time, v_t_stampt2 as e_time
from table(v_price_index);
end;

您需要进行一些异常处理(no_data_found 等),但这应该可以准确地满足您的需求。

关于sql - 查询的开始和结束时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51721332/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com