powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос в БД АСКУЭ
6 сообщений из 6, страница 1 из 1
запрос в БД АСКУЭ
    #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
запрос в БД АСКУЭ
    #40102442
Фотография Vadim Lejnin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для начала покажите струтуру ST_AR:
Код: plsql
1.
2.
sqlplus user/pass@tns_alias
SQL> describe ST_AR



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

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

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

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


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


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

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

.....
stax
...
Рейтинг: 0 / 0
запрос в БД АСКУЭ
    #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
6 сообщений из 6, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / запрос в БД АСКУЭ
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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