Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Глобальная временная таблица / 7 сообщений из 7, страница 1 из 1
31.10.2006, 10:17
    #34093110
power-baa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Пытаюсь в хранимой процедуре создать пространство для глобальной временной таблицы :

CREATE PROCEDURE PD190439.baa_gvt ( IN in_dat DATE,
IN out_dat DATE )
DYNAMIC RESULT SETS 1
------------------------------------------------------------------------
-- SQL Хранимая процедура
-- in_dat
-- out_dat
------------------------------------------------------------------------


P1: BEGIN

CREATE USER TEMPORARY TABLESPACE usertemp1 MANAGED BY SYSTEM USING ('J:\db\Tablespaces\DGTTsWhatsNewContainer');



DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT DEATH.FAMILY , DEATH.NAME_L , DEATH.FATHER , DEATH.D_ROGD , DEATH.D_SMER , DEATH.ADRES , DEATH.L_SCHET
FROM DEATH AS DEATH
WHERE DEATH.D_SMER >= BAA_gvt.in_dat AND DEATH.D_SMER <= BAA_gvt.out_dat;


OPEN cursor1;


END P1

Ругается :

PD190439.baa_gvt - Построение запущено.
DROP SPECIFIC PROCEDURE PD190439.SQL061030111257779
PD190439.baa_gvt - Отбрасывание хранимая процедура завершено.
При создании хранимая процедура возвращен -104.
PD190439.baa_gvt: 12: [IBM][CLI Driver][DB2/NT] SQL0104N Обнаружен неправильный элемент "CREATE USER TEMPORARY TABLESPACE use" после текста "------- P1: BEGIN ". Список правильных элементов: "<psm_return>". LINE NUMBER=12. SQLSTATE=42601


PD190439.baa_gvt - Построение завершилось неудачно.
PD190439.baa_gvt - Откат успешно выполнен.

Что не так делаю ?
...
Рейтинг: 0 / 0
31.10.2006, 10:53
    #34093290
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
P1: BEGIN
declare stmt varchar( 512 );

DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT DEATH.FAMILY , DEATH.NAME_L , DEATH.FATHER , DEATH.D_ROGD , DEATH.D_SMER , DEATH.ADRES , DEATH.L_SCHET
FROM DEATH AS DEATH
WHERE DEATH.D_SMER >= BAA_gvt.in_dat AND DEATH.D_SMER <= BAA_gvt.out_dat;

set stmt=
  'CREATE USER TEMPORARY TABLESPACE usertemp1 '
||'MANAGED BY SYSTEM USING (''J:\db\Tablespaces\DGTTsWhatsNewContainer'')';
EXECUTE IMMEDIATE stmt;

OPEN cursor1;
END P1

PS:
Странный подход - создавать табличное пространство в такой процедуре.
Я надеюсь, это не реальный код?
А то она у вас на втором же вызове вывалится...
...
Рейтинг: 0 / 0
31.10.2006, 14:27
    #34094329
power-baa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Mark Barinstein
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
P1: BEGIN
declare stmt varchar( 512 );

DECLARE cursor1 CURSOR WITH RETURN FOR
SELECT DEATH.FAMILY , DEATH.NAME_L , DEATH.FATHER , DEATH.D_ROGD , DEATH.D_SMER , DEATH.ADRES , DEATH.L_SCHET
FROM DEATH AS DEATH
WHERE DEATH.D_SMER >= BAA_gvt.in_dat AND DEATH.D_SMER <= BAA_gvt.out_dat;

set stmt=
  'CREATE USER TEMPORARY TABLESPACE usertemp1 '
||'MANAGED BY SYSTEM USING (''J:\db\Tablespaces\DGTTsWhatsNewContainer'')';
EXECUTE IMMEDIATE stmt;

OPEN cursor1;
END P1

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

Это не реальный код.
А как прочитать данные из временной таблицы ?
Делаю:
DECLARE cursor1 CURSOR WITH RETURN FOR SELECT * FROM session.ttt;
OPEN cursor1;

компилятор ругается.
...
Рейтинг: 0 / 0
31.10.2006, 15:12
    #34094546
power-baa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Вот такой тестовый код у меня компилится:

P1: BEGIN
declare stmt varchar(512);
set stmt='CREATE USER TEMPORARY TABLESPACE usertemp1 MANAGED BY SYSTEM USING (''J:\db\Tablespaces\DGTTsWhatsNewContainer'')';
EXECUTE IMMEDIATE stmt;
DECLARE GLOBAL TEMPORARY TABLE ttt(column1 INT, column2 INT);
INSERT INTO session.ttt(column1, column2) VALUES ( 100, 100);
INSERT INTO session.ttt(column1, column2) VALUES ( 200, 200);
INSERT INTO session.ttt(column1, column2) VALUES ( 300, 300);
BEGIN
DECLARE cursor1 CURSOR WITH RETURN
FOR SELECT * FROM session.ttt;
OPEN cursor1;
END;

Но при выполнении выдаёт ошибку :

PD190439.baa_gvt - Выполнение запущено.
PD190439.baa_gvt - Исключительная ситуация при выполнении:
A database manager error occurred.[IBM][CLI Driver][DB2/NT] SQL0601N Имя создаваемого объекта идентично существующему имени "USERTEMP1" типа "TABLESPACE". SQLSTATE=42710
PD190439.baa_gvt - Откат успешно выполнен.
PD190439.baa_gvt - Ошибка выполнения.
...
Рейтинг: 0 / 0
31.10.2006, 15:23
    #34094607
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Есть 3 выхода:

1. Декларировать временную таблицу ДО компиляции.
2. Делать что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
DECLARE cursor1 CURSOR WITH RETURN FOR s1;
-- декларируем и заполняем session.ttt
...
set stmt='SELECT * FROM session.ttt';
PREPARE s1 FROM stmt;
OPEN cursor1; 
3. Использовать вложенные begin ... end, как вы написали.

PS:
Зачем в процедуре вы создаете темповое табличное пространство???
Это пространство создается 1 раз админом, так же, как и другие пространства.
Потом админ дает права пользователям на использование этого пространства.
После этого пользователи могут декларировать свои временные таблицы.
...
Рейтинг: 0 / 0
01.11.2006, 10:30
    #34096425
power-baa
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Mark BarinsteinЕсть 3 выхода:

1. Декларировать временную таблицу ДО компиляции.
2. Делать что-то типа:
Код: plaintext
1.
2.
3.
4.
5.
DECLARE cursor1 CURSOR WITH RETURN FOR s1;
-- декларируем и заполняем session.ttt
...
set stmt='SELECT * FROM session.ttt';
PREPARE s1 FROM stmt;
OPEN cursor1; 
3. Использовать вложенные begin ... end, как вы написали.

PS:
Зачем в процедуре вы создаете темповое табличное пространство???
Это пространство создается 1 раз админом, так же, как и другие пространства.
Потом админ дает права пользователям на использование этого пространства.
После этого пользователи могут декларировать свои временные таблицы.

А как создаваемая временная таблица узнает какому пространству
она принадлежит? У меня при попытке читать-писать выдаётся ошибка
...
Рейтинг: 0 / 0
01.11.2006, 11:10
    #34096603
Mark Barinstein
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Глобальная временная таблица
Смотрите тут .
Обратите внимание на описание предложения IN tablespace-name .
Ошибка-то какая выдается?
...
Рейтинг: 0 / 0
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / Глобальная временная таблица / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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