Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Условная выборка из курсора - как реализовать? / 4 сообщений из 4, страница 1 из 1
02.09.2008, 19:18
    #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
03.09.2008, 09:51
    #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
03.09.2008, 12:33
    #35520043
Nafigator
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условная выборка из курсора - как реализовать?
Ух ты, что можно вытворять! Спасибо в очередной раз, буду разбираться!
...
Рейтинг: 0 / 0
07.09.2008, 20:18
    #35526613
BuryCommoner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условная выборка из курсора - как реализовать?
Почему нельзя объявлять временные таблицы? Можно и нужно. Скорее всего объявление должно идти после других DECLARE. Чтобы не отбрасывать её самому, не нужно писать ON COMMIT preserve rows.
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Условная выборка из курсора - как реализовать? / 4 сообщений из 4, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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