Привет, у меня проблема. Я не знаю, может ли кто-нибудь помочь. У меня созданы вложенные таблицы и вставлены значения в таблицу.PL/SQL найти значения в вложенных таблицах
CREATE OR REPLACE TYPE tt_hours AS OBJECT(hours INTEGER, data NUMBER);
/
CREATE OR REPLACE TYPE tt_day AS VARRAY(7) OF tt_hours;
/
CREATE TABLE NEM_RM16
(
DAY DATE,
VALUE_hours tt_day
);
INSERT INTO NEM_RM16
(day, value_hours)
VALUES
(TO_DATE('01/06/2012 22:00:34'),
tt_DAY(
tt_hours(1,0.025727),
tt_hours(2,0.012047),
tt_hours(3,0.012857),
tt_hours(4,0.012107),
tt_hours(5,0.012849),
tt_hours(6,0.01215),
tt_hours(7,0.0129)));
Так что будет 30 строк, вставленные в new_table каждый из которых представляет 1 день месяца в этом месяце (июнь). выше приведен пример первой строки с днем = 01/06/2012 с 8 часами данных.
Как написать программу, чтобы найти весь средний час всего определенного дня, например, среднее значение всего первого часа всех понедельников в таблице (бог, я надеюсь, что у меня есть смысл).
результат должен быть 7 строк (7 дней в неделю) с
tt_hours (1, average over the month)
tt_hours (2, average over the month)
..........
Второй стол:
CREATE TABLE old_table (tDAY DATE, VALUE_thours tt_day);
я пытался вставить, используя следующее. Чтобы вставить результат в старую таблицу, но не работает.
insert into old_table (day, value_hours) values
(SELECT to_char(DAY, 'Day'),
hours, AVG(data) FROM NEM_RM16 n, TABLE(n.value_hours) v
GROUP BY to_char(DAY, 'Day'), hours);
например, old_table должна иметь следующие данные в пятницу после запуска вашего оператора select. Часы и дата находятся во вложенной таблице, а tdate - тип DATE. Как вы можете видеть, результат - это то, что вывел оператор select, но вставляется в одну и ту же структурированную таблицу.
tdate HOURS data
----------- ---------- ----------
Friday 1 0,025727
Friday 2 0,012047
Friday 3 0,012857
Friday 4 0,012107
Friday 5 0,012849
Friday 6 0,01215
Friday 7 0,0129
Привет Спасибо за ответ. Если я хочу вставить эти результаты в другую таблицу с той же самой таблицей гнезд внутри, могу ли я сделать это? – user1332821
INSERT INTO old_table a (день, t.часов, t.DATA) ТАБЛИЦА (a.value_hours) t old_table имеет ту же структуру, что и Nem_RM16, за исключением того, что строки пустые. предназначен для хранения результатов. – user1332821
Вы можете использовать [COLLECT] (http://docs.oracle.com/cd/E11882_01/server.112/e26088/functions031.htm#SQLRF06304) для построения типа вложенной таблицы. –