powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Условная выборка из курсора - как реализовать?
4 сообщений из 4, страница 1 из 1
Условная выборка из курсора - как реализовать?
    #35518935
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код - НЕПРАВИЛЬНЫЙ, но, думаю, идея понятна: нужно с каким-то числом сравнить разницу значений между текущей записью и предыдущей...

Я не знаю, куда из курсора выбрать значения - временных нормальных таблиц в db2 я не нашел... :(
Или тут можно написать суперзапрос, который это сделает в один прием? Я так не сумел...

CREATE PROCEDURE SVC.TIMEHOLE(IN SECONDS INTEGER)
READS SQL DATA
RESULT SETS 1
LANGUAGE SQL

BEGIN

-- оказывается, в процедуре нельзя объявить временную таблицу :(
DECLARE GLOBAL TEMPORARY TABLE mytime_temp (mytime timestamp) ON COMMIT preserve rows not logged;

DECLARE mytime TIMESTAMP;
DECLARE mytimeprev TIMESTAMP;
DECLARE v_sqlstatus INTEGER DEFAULT 0;

DECLARE ts CURSOR WITH RETURN FOR
select datetimestamp from SVC.mdisk_performance group by datetimestamp order by datetimestamp desc
FOR FETCH ONLY;

DECLARE timescroll_ok CURSOR WITH RETURN FOR
select mytime from SESSION.mytime_temp
FOR FETCH ONLY;

DECLARE CONTINUE HANDLER FOR NOT FOUND
SET v_sqlstatus = -1;

DECLARE CONTINUE HANDLER FOR SQLEXCEPTION
SET v_sqlstatus = -1;

SET mytimeprev = 0;

--BEGIN TRANSACTION

OPEN timescroll;

FETCH timescroll INTO mytime;
WHILE v_sqlstatus = 0 DO
IF TSM.SECONDSDIFF(mytime - mytimeprev) > SECONDS AND mytimeprev > 0 THEN
INSERT INTO SESSION.mytime_temp VALUES (mytime);
END IF;
SET v_sqlcode = SQLCODE;
SET mytimeprev = mytime;
FETCH timescroll INTO mytime;
END WHILE;

CLOSE timescroll;

OPEN timescroll_ok;

DROP TABLE mytime_temp;

--END TRANSACTION;

END;
...
Рейтинг: 0 / 0
Условная выборка из курсора - как реализовать?
    #35519484
Mark Barinstein
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
CREATE FUNCTION SVC.TIMEHOLE(SECONDS INT)
RETURNS TABLE(mytime timestamp)
READS SQL DATA
RETURN
with a(datetimestamp) as (
select datetimestamp 
from SVC.mdisk_performance 
group by datetimestamp
)
, b(curr, prev) as (
select datetimestamp
, max(datetimestamp) over(order by datetimestamp rows between  1  preceding and  1  preceding)
from a
)
select curr
from b
where timestampdiff( 2 , char(curr - prev))>SECONDS;

SELECT * FROM TABLE(SVC.TIMEHOLE( 1 ))T;
...
Рейтинг: 0 / 0
Условная выборка из курсора - как реализовать?
    #35520043
Nafigator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ух ты, что можно вытворять! Спасибо в очередной раз, буду разбираться!
...
Рейтинг: 0 / 0
Условная выборка из курсора - как реализовать?
    #35526613
BuryCommoner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Почему нельзя объявлять временные таблицы? Можно и нужно. Скорее всего объявление должно идти после других DECLARE. Чтобы не отбрасывать её самому, не нужно писать ON COMMIT preserve rows.
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Условная выборка из курсора - как реализовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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