powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / временная таблица
26 сообщений из 26, показаны все 2 страниц
временная таблица
    #32997820
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет All.

создаю временную таблицу:
WITH <name> as
(
select p1,p2 from p
)

не работает :(
в чем я ошибаюсь??

PS киньте плиз ссылок на книги по SPL
...
Рейтинг: 0 / 0
временная таблица
    #32997885
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит не работает? Как обращаешься ко временной таблице?
http://ourworld.compuserve.com/homepages/Graeme_Birchall
...
Рейтинг: 0 / 0
временная таблица
    #32997906
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вот простенький пример
CREATE PROCEDURE info1
LANGUAGE SQL
BEGIN
WITH temp1 (NAME) AS
(
select p1 from p
)
END!

так она не собирается "Центром управления" говорит что не верный синтаксис :(
...
Рейтинг: 0 / 0
временная таблица
    #32997999
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
connect to test@

create procedure get_report()
language sql
result sets  1 
begin
	declare cret cursor with return for
	with tmp(id,name) as (
		values( 65 ,cast('A1234567890' as char( 50 )))
	union all
	    select 
	    	tmp.id+ 1 ,
	    	chr(tmp.id+ 1 )||rtrim(tmp.name)
		from
			tmp
		where 
			tmp.id<= 65 + 24 
	) select tmp.*,current date from tmp;
	open cret;
end
@
commit@
call get_report@
...
Рейтинг: 0 / 0
временная таблица
    #32998000
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CREATE PROCEDURE info1
LANGUAGE SQL
BEGIN
WITH temp1 (NAME) AS
(
select p1 from p
)
select * from temp1
END

???
...
Рейтинг: 0 / 0
временная таблица
    #32998003
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще если что то из процедуры должно возвращаться нужно объявлять курсор, ИМХО.
...
Рейтинг: 0 / 0
временная таблица
    #32999422
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может, человеку нужен
Код: plaintext
DECLARE GLOBAL TEMPORARY TABLE ...
...
Рейтинг: 0 / 0
временная таблица
    #32999614
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
если с курсором то все нормально проходит:

declare cret cursor with return for
with tmp(name) as (
select 223 from sysibm.sysdummy1
) select * from tmp;
open cret;

без курсора не проходит.
а если мне курсор не нужен????
мне нужна таблица из которой можно также выборку сделать....
...
Рейтинг: 0 / 0
временная таблица
    #32999840
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тогда тебе сказали:
Alexey PopovМожет, человеку нужен
Код: plaintext
DECLARE GLOBAL TEMPORARY TABLE ...
...
Рейтинг: 0 / 0
временная таблица
    #33000747
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понял что
Код: plaintext
with name as (....) select

нельзя испльзовать в хранимых процедурах ?
...
Рейтинг: 0 / 0
временная таблица
    #33000812
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 PSasa
WITH можно трактовать как предварительную выборку данных действующую в рамках одного запроса. Например,
Код: plaintext
1.
2.
3.
4.
5.
6.
WITH Q1(ID, COUNT) AS
(SELECT T1.FIELD_N1, COUNT(T1.FIELD_N2)
FROM T1
GROUP BY T1.FIELD_N1)
SELECT T2.ID, T2.NAME, Q1.COUNT
FROM T2
  INNER JOIN Q1 ON (Q1.ID = T2.ID)
Разумеется, данный запрос можно перефразировать:
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT T2.ID, T2.NAME, Q1.COUNT
FROM Q2
  INNER JOIN
    (SELECT T1.FIELD_N1, COUNT(T1.FIELD_N2)
     FROM T1
     GROUP BY T1.FIELD_N1) AS Q1(ID, COUNT)
    ON (Q1.ID = T2.ID)
Временная таблица, это несколько другое (вернее, совсем другое). Для начала создается USER TEMPORARY TABLESPACE . И в нем объявляется временная таблица... Ищи в доках по фразе DECLARE GLOBAL TEMPORARY TABLESPACE .
...
Рейтинг: 0 / 0
временная таблица
    #33000844
Фотография Alexey Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пардон, ошибочка с обозначением COUNT :-\
Код: plaintext
1.
2.
3.
4.
5.
6.
WITH Q1(ID, COUNT_N2) AS
(SELECT T1.FIELD_N1, COUNT(T1.FIELD_N2)
FROM T1
GROUP BY T1.FIELD_N1)
SELECT T2.ID, T2.NAME, Q1.COUNT_N2
FROM T2
  INNER JOIN Q1 ON (Q1.ID = T2.ID)
&
Код: plaintext
1.
2.
3.
4.
5.
6.
SELECT T2.ID, T2.NAME, Q1.COUNT_N2
FROM Q2
  INNER JOIN
    (SELECT T1.FIELD_N1, COUNT(T1.FIELD_N2)
     FROM T1
     GROUP BY T1.FIELD_N1) AS Q1(ID, COUNT_N2)
    ON (Q1.ID = T2.ID)
...
Рейтинг: 0 / 0
временная таблица
    #33001069
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PSasaя так понял что
Код: plaintext
with name as (....) select

нельзя испльзовать в хранимых процедурах ?
можно, можно.
...
Рейтинг: 0 / 0
временная таблица
    #33001190
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
riman PSasaя так понял что
Код: plaintext
with name as (....) select

нельзя испльзовать в хранимых процедурах ?
можно, можно.

а как???
есть какие то камни подводные или ОНО должно работать "как есть" ???
может что то нужно проинициализировать, создать....
...
Рейтинг: 0 / 0
временная таблица
    #33001227
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: plaintext
WITH
- это неотемлемая часть запроса оператора SELECT, не имеющая смысла вне егою
Соответсвенно и таблица создается на уровне одного оператора. Так как это часть SQL запроса, то запрос содержащий WITH может использоваться в SP
Если тебе нужно обратится к одной таблице из нескольких операторов тогда нужно пользоваться
Код: plaintext
1.
DECLARE GLOBAL TEMPORARY TABLE

Скажи лучше что ты хочешь сделать
...
Рейтинг: 0 / 0
временная таблица
    #33001280
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне в зависимости от некоторых условий условий нужно создать разные таблицы, но с одинаковой структутой, а затем сделать выборку из этой таблицы
Код: plaintext
1.
2.
3.
DECLARE GLOBAL TEMPORARY TABLE session.fred AS
(select  323  from sysibm.sysdummy1)
DEFINITION ONLY;
то что мне нужно :) только как сделать чтоб в таблицу заносились результаты выборки.... пока не нашел :( (приходиться запрос второй раз повторять для insert)
...
Рейтинг: 0 / 0
временная таблица
    #33001369
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нет это плохое описание задачи

посмотри как я сделал в
http://www.sql.ru/forum/actualthread.aspx?tid=173225
И по пунктам изложи примерно тоже самое.
...
Рейтинг: 0 / 0
временная таблица
    #33001821
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пример:
DECLARE GLOBAL TEMPORARY TABLE SESSION.SOSTAV_FIRST (
ID_AU INTEGER,
ID_UNIT INTEGER,
ID_DEPT INTEGER,
NROUTE INTEGER,
ID_DEPT_FIRST INTEGER,
ID_DEPT_LAST INTEGER,
AMOUNT DOUBLE)
WITH REPLACE ON COMMIT PRESERVE ROWS NOT LOGGED;

где

REPLACE - позволяет повторное объявление, без предварительного DROP.
(по моему лучше явно DROP и COMMIT т.к. в UDB v 7.2 for win наблюдал что повторное объявление не до конца очищало память (ОЗУ) на сервере, что при многократном повторении приводило к заметному снижению скорострельности)

ON COMMIT PRESERVE ROWS - это чтоб данные после COMMIT оставались в таблице

Работать с ней как с обыкновенной, т.е. INSERT, UPDATE, SELECT.
Доступ к таблице в только пределах одного коннекта и без ограничений - т.е. видна после создания из любых SP и самой проги.

При создании SQL SP, использующих такие таблицы, рекомендую первым исполняемым оператором вставлять оператор IF с невыполнимым условием и объявлением таблицы:
IF 1=2 THEN
DECLARE GLOBAL TEMPORARY ...
ENDIF
...
Рейтинг: 0 / 0
временная таблица
    #33001915
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
golsa
При создании SQL SP, использующих такие таблицы, рекомендую первым исполняемым оператором вставлять оператор IF с невыполнимым условием и объявлением таблицы:
IF 1=2 THEN
DECLARE GLOBAL TEMPORARY ...
ENDIF
а для чего, можно узнать?
...
Рейтинг: 0 / 0
временная таблица
    #33002023
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Мне нужно чтоб структура таблицы и ее заполнение происходило по select`у
например так:
Код: plaintext
1.
2.
3.
4.
	DECLARE GLOBAL TEMPORARY TABLE session.fred AS
	(select name from sysibm.systables)
	DEFINITION ONLY
	INCLUDING COLUMN DEFAULTS

таблица создается с нужной структурой но пустая :(
...
Рейтинг: 0 / 0
временная таблица
    #33002047
gardenman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Придется значит два раза запросик писать
...
Рейтинг: 0 / 0
временная таблица
    #33002098
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
gardenmanПридется значит два раза запросик писать

это шутка???
что DB2 не может ее сразу заполнить? бред....
...
Рейтинг: 0 / 0
временная таблица
    #33002168
nkulikov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не бред, а так сделано.
...
Рейтинг: 0 / 0
временная таблица
    #33002421
golsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 riman
Это просто обман транслятора.
При создании SQL SP проверяется наличие в БД всех таблиц встреченных в тексте процедуры.
А для временных таблиц сделано послабление - достаточно наличие соответствующего оператора DECLARE GLOBAL TEMPORARY ... , причем не важно - исполнится он когданибудь или нет (т.е. логика не проверяется).
Для процедур, которые получают уже заполненные времянки есть только два пути создания.
1) - перед созданием выполняешь процедуру (скрипт), которая создает временную таблицу.
2) - псевдо создание временной таблицы (DECLARE GLOBAL TEMPORARY - исполняемый оператор, т.е. реально таблица не создается, пока он не будет выполен в процессе выполнения процедуры.)
...
Рейтинг: 0 / 0
временная таблица
    #33002717
Фотография riman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
понятно, спасибо.
...
Рейтинг: 0 / 0
временная таблица
    #33003367
PSasa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Народ.
ВСЕМ большое спасибо за помощь. Теперь знаю как с этими таблицами бороться :)
...
Рейтинг: 0 / 0
26 сообщений из 26, показаны все 2 страниц
Форумы / IBM DB2, WebSphere, IMS, U2 [игнор отключен] [закрыт для гостей] / временная таблица
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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