У меня есть следующее определение таблицы и инструкция INSERT, которые работают нормально.
create table. tour_detail (
location_id NUMBER(4),
time interval day to second
)
insert into tour_detail.
(location_id,time)
values (3, interval '11:30' hour to minute)
Можно ли изменить CTE в приведенном ниже примере в таблице tour_detail для выполнения следующих действий.
Измените его, чтобы оставить только HH24: MI, а остальные поля = 0.
Как время может зависеть друг от друга, например val = val + rand (6,12) минут.
Если val> = 23:45, его можно сбросить на какой-то случайный HH24: MI.
can для каждого tour_hdr (tour_id) создается случайное количество (15-25) строк tour_detail. При создании этих строк используйте только строки идентификаторов местоположений, где location_type = 'G'
необходимо убедиться, что один и тот же location_id не является последовательным
Я в настоящее время, сохраняя tour_detail (tour_time) в MMDDYYYY HH24: MI: SS, и мне нужно только HH: SS.
ALTER SESSION SET. NLS_DATE_FORMAT = 'MMDDYYYY HH24:MI:SS';
CREATE TABLE locations AS
SELECT level AS location_id,
'Door ' || level AS location_name,
CASE. round(dbms_random.value(1,3))
WHEN 1 THEN 'A'
WHEN 2 THEN 'T'
WHEN 3 THEN 'G'
END AS location_type
FROM dual
CONNECT BY level <= 25;
ALTER TABLE locations
ADD ( CONSTRAINT location_id_pk
PRIMARY KEY (location_id));
CREATE TABLE tour_hdr AS
SELECT level AS tour_id,
'Tour ' || level AS tour_name
FROM dual
CONNECT BY level <= 15;
ALTER TABLE tour_hdr
ADD ( CONSTRAINT tour_hdr_id_pk
PRIMARY KEY (tour_id));
create table tour_detail
(
tour_id NUMBER(4),
tour_time DATE,
location_id NUMBER(4)
)
declare
v_loc number;
v_prev_loc number := 0;
v_dt date := trunc(sysdate);
v_dt_save date := trunc(sysdate);
begin
for trs in ( select tour_id from tour_hdr)
loop
-- for each tour generate 15 to 25 rows
for i in 1..dbms_random.value(15, 25) loop
-- If date >23:45:00 reset. Should I
-- interval be used instead of date
IF v_dt > (v_dt_save + (1/1440*1425))
THEN
-- reset time
v_dt := v_dt_save;
ELSE
-- increase last used date by random 6 to 12 minutes
v_dt := v_dt + dbms_random.value(6,12)/(24*60);
END IF;
-- get random location
select location_id
into v_loc
from (select location_id from locations where location_type = 'G' order by dbms_random.value)
where rownum = 1;
IF v_prev_loc != v_loc
THEN
insert into tour_detail (tour_id, tour_time, location_id)
values (trs.tour_id, v_dt, v_loc);
v_prev_loc := v_loc;
END IF;
end loop;
end loop;
end;
Моя цель - извлечь запись из tour_detail и найти запись для таблицы access_history и посмотреть, успел ли охранник, рано или поздно, не добраться до этого места. Короче говоря, мне нужно будет сравнить MMDDYYYY HH24: MI: SS с строкой временного интервала. Было бы сложно это сделать sh