Гость
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос в БД АСКУЭ / 6 сообщений из 6, страница 1 из 1
06.10.2021, 17:23
    #40102411
Euphie_Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
Здравствуйте!
Помогите пожалуйста познать дзен справиться с задачей. Имеется некая система учёта электроэнергии, БД Oracle и экселевские отчёты, для создания которых нужно написать запрос.
В эксель нужно выгнать из базы измерения за 15-минутный интервал по заданным точкам учёта, т.е. в итоге должен быть столбец с ИД точки учёта_день месяца, и 96 столбцов, содержащих данные измерений за интервал времени (00:00, 00:15, 00:30 и т.д.)
Я составила пилотный запрос такого вида:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
with diena as (select TRUNC($$D:=:MO$$,'MM') dd from dual)
select 
POINT_ID||'_'||Ydata, POINT_CODE,
max(decode(ET,'00:00', ROUND(val))) "00:00",
max(decode(ET,'00:15', ROUND(val,3))) "00:15",
max(decode(ET,'00:30', ROUND(val,3))) "00:30",
max(decode(ET,'00:45', ROUND(val,3))) "00:45",
max(decode(ET,'01:00', ROUND(val,3))) "01:00",
max(decode(ET,'01:15', ROUND(val,3))) "01:15",
max(decode(ET,'01:30', ROUND(val,3))) "01:30",
max(decode(ET,'01:45', ROUND(val,3))) "01:45",
max(decode(ET,'02:00', ROUND(val,3))) "02:00",
max(decode(ET,'02:15', ROUND(val,3))) "02:15",
max(decode(ET,'02:30', ROUND(val,3))) "02:30",
max(decode(ET,'02:45', ROUND(val,3))) "02:45",
max(decode(ET,'03:00', ROUND(val,3))) "03:00",
max(decode(ET,'03:15', ROUND(val,3))) "03:15",
max(decode(ET,'03:30', ROUND(val,3))) "03:30",
max(decode(ET,'03:45', ROUND(val,3))) "03:45",
max(decode(ET,'04:00', ROUND(val,3))) "04:00",
max(decode(ET,'04:15', ROUND(val,3))) "04:15",
max(decode(ET,'04:30', ROUND(val,3))) "04:30",
max(decode(ET,'04:45', ROUND(val,3))) "04:45",
max(decode(ET,'05:00', ROUND(val,3))) "05:00",
max(decode(ET,'05:15', ROUND(val,3))) "05:15",
max(decode(ET,'05:30', ROUND(val,3))) "05:30",
max(decode(ET,'05:45', ROUND(val,3))) "05:45",
max(decode(ET,'06:00', ROUND(val,3))) "06:00",
max(decode(ET,'06:15', ROUND(val,3))) "06:15",
max(decode(ET,'06:30', ROUND(val,3))) "06:30",
max(decode(ET,'06:45', ROUND(val,3))) "06:45",
max(decode(ET,'07:00', ROUND(val,3))) "07:00",
max(decode(ET,'07:15', ROUND(val,3))) "07:15",
max(decode(ET,'07:30', ROUND(val,3))) "07:30",
max(decode(ET,'07:45', ROUND(val,3))) "07:45",
max(decode(ET,'08:00', ROUND(val,3))) "08:00",
max(decode(ET,'08:15', ROUND(val,3))) "08:15",
max(decode(ET,'08:30', ROUND(val,3))) "08:30",
max(decode(ET,'08:45', ROUND(val,3))) "08:45",
max(decode(ET,'09:00', ROUND(val,3))) "09:00",
max(decode(ET,'09:15', ROUND(val,3))) "09:15",
max(decode(ET,'09:30', ROUND(val,3))) "09:30",
max(decode(ET,'09:45', ROUND(val,3))) "09:45",
max(decode(ET,'10:00', ROUND(val,3))) "10:00",
max(decode(ET,'10:15', ROUND(val,3))) "10:15",
max(decode(ET,'10:30', ROUND(val,3))) "10:30",
max(decode(ET,'10:45', ROUND(val,3))) "10:45",
max(decode(ET,'11:00', ROUND(val,3))) "11:00",
max(decode(ET,'11:15', ROUND(val,3))) "11:15",
max(decode(ET,'11:30', ROUND(val,3))) "11:30",
max(decode(ET,'11:45', ROUND(val,3))) "11:45",
max(decode(ET,'12:00', ROUND(val,3))) "12:00",
max(decode(ET,'12:15', ROUND(val,3))) "12:15",
max(decode(ET,'12:30', ROUND(val,3))) "12:30",
max(decode(ET,'12:45', ROUND(val,3))) "12:45",
max(decode(ET,'13:00', ROUND(val,3))) "13:00",
max(decode(ET,'13:15', ROUND(val,3))) "13:15",
max(decode(ET,'13:30', ROUND(val,3))) "13:30",
max(decode(ET,'13:45', ROUND(val,3))) "13:45",
max(decode(ET,'14:00', ROUND(val,3))) "14:00",
max(decode(ET,'14:15', ROUND(val,3))) "14:15",
max(decode(ET,'14:30', ROUND(val,3))) "14:30",
max(decode(ET,'14:45', ROUND(val,3))) "14:45",
max(decode(ET,'15:00', ROUND(val,3))) "15:00",
max(decode(ET,'15:15', ROUND(val,3))) "15:15",
max(decode(ET,'15:30', ROUND(val,3))) "15:30",
max(decode(ET,'15:45', ROUND(val,3))) "15:45",
max(decode(ET,'16:00', ROUND(val,3))) "16:00",
max(decode(ET,'16:15', ROUND(val,3))) "16:15",
max(decode(ET,'16:30', ROUND(val,3))) "16:30",
max(decode(ET,'16:45', ROUND(val,3))) "16:45",
max(decode(ET,'17:00', ROUND(val,3))) "17:00",
max(decode(ET,'17:15', ROUND(val,3))) "17:15",
max(decode(ET,'17:30', ROUND(val,3))) "17:30",
max(decode(ET,'17:45', ROUND(val,3))) "17:45",
max(decode(ET,'18:00', ROUND(val,3))) "18:00",
max(decode(ET,'18:15', ROUND(val,3))) "18:15"
from (
select c.POINT_ID,c.POINT_CODE,a.ML_ID,a.DA,VAL, a.ET,a.Ydata,a.BT from (
Select POINT_ID,POINT_CODE,ML_ID,DA,BT,Val,
to_char(BT,'HH24:mi') ET
,to_char(BT+0/24,'DD') Ydata
from ST_AR,diena 
where ml_id in(1044)
and POINT_ID in (45)
and DA>=dd AND DA<=last_day(dd)  
) a
left join ST_POINT_ c
ON(a.POINT_ID=c.POINT_ID)
)
group by (POINT_ID, POINT_CODE, ML_ID,Ydata)
order by  1



Запрос работает, и делает то, что от него требуется.
НО
Только до 18:15. На остальные сутки не дает написать, говорит ошибку ORA-01461: может связывать значение LONG только для вставки в столбец LONG.
Я не ораклист ни разу, помогите пожалуйста, советом, как сделать лучше, в какую сторону копать. Буду рада.
...
Рейтинг: 0 / 0
06.10.2021, 18:37
    #40102442
Vadim Lejnin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
Для начала покажите струтуру ST_AR:
Код: plsql
1.
2.
sqlplus user/pass@tns_alias
SQL> describe ST_AR



И уточните, у Вас ошибка возникает при выполнении запроса из excel или в oracle, например в sqlplus?
...
Рейтинг: 0 / 0
06.10.2021, 20:10
    #40102460
Euphie_Z
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
Vadim Lejnin,
структура в скриншоте, если я всё сделала верно.

SQL plus я почти не использую, так как не особенно разбираюсь в вопросе.
В ПО реализована возможность добавлять запросы не касаясь самой БД, и там ведутся логи, которые сопровождают успешное или нет выполнение запросов.
...
Рейтинг: 0 / 0
07.10.2021, 07:02
    #40102510
landy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
Euphie_Z,

Ограничте в запросе интервал времени, например с 18-00 до 23-00,поправьте пилотный запрос и попробуйте.
Если работает, то видимо это не проблемы БД
...
Рейтинг: 0 / 0
07.10.2021, 08:59
    #40102542
Stax
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
Euphie_Z

В ПО реализована возможность добавлять запросы не касаясь самой БД, и там ведутся логи, которые сопровождают успешное или нет выполнение запросов.


имхо
слетает не Ваш запрос, а ПО которое ...


длина запроса становится больше 4000 байт, вот оно и слетает, не может добавлять, логировать и тд

как проверить мою гипотезу, уменьшить длину запроса, переписать более компактно
напр заменить val на алиас v, et на e, и тд

.....
stax
...
Рейтинг: 0 / 0
07.10.2021, 11:07
    #40102607
serpv
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
запрос в БД АСКУЭ
более компактно, если версия позволяет:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
with t as (select  date '2021-01-01' + level*15/60/24 BT, dbms_random.value(0, 1) val from dual connect by level <= 300)
select * from
(select trunc(BT), to_char(BT,'hh24:mi') ET, round(val,3) val from t)
PIVOT
( MIN (val)  FOR ET IN
(
'00:15',
'00:30',
'00:45',
'01:00',
'01:15',
'01:30',
'01:45',
'02:00',
'02:15',
'02:30'
)
)
;

TRUNC(BT)              '00:15'    '00:30'    '00:45'    '01:00'    '01:15'    '01:30'    '01:45'    '02:00'    '02:15'    '02:30'
------------------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ---------- ----------
03-01-2021 00:00:00       .064       .888       .777       .777       .999        .55       .572       .562       .192       .258
04-01-2021 00:00:00       .935       .283       .068       .525       .925       .486       .696       .849       .777       .751
01-01-2021 00:00:00       .581        .28       .502       .358        .91        .31       .767       .823       .413       .489
02-01-2021 00:00:00       .742       .592       .104       .883       .337       .414        .73       .038       .444       .495
...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос в БД АСКУЭ / 6 сообщений из 6, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]