Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 как создать временную таблицу ? / 18 сообщений из 18, страница 1 из 1
29.11.2004, 14:12
    #32804002
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Как создать временную таблицу по аналогии с create global temporary в ASA ? Чтобы данные жили на время сессии
...
Рейтинг: 0 / 0
29.11.2004, 14:37
    #32804096
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
1 create table #yourtemptable (fld1 тип1, fld2 тип2.....)

-или -

2 - select fld1,fld2,fldn into
#yourtemptable
from sometable
...
Рейтинг: 0 / 0
29.11.2004, 14:43
    #32804111
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
vooo1 create table #yourtemptable (fld1 тип1, fld2 тип2.....)

-или -

2 - select fld1,fld2,fldn into
#yourtemptable
from sometable


sorry, попутал т к вопрос стоял о сессии
...
Рейтинг: 0 / 0
29.11.2004, 15:13
    #32804193
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
По аналогии с MSSQL думаю так:
Код: plaintext
CREATE TABLE ##Table1 (...)
Только в MSSQL например это не будет являться полным аналогом с глобальными временными таблицами ASA по нескольким причинам:
1. Данные такой таблицы будут видеть все сессии.
2. Нужно при ее создании проверять в TempDB что она еще не создана в какой либо другой сессии, иначе получим ошибку, что она уже была создана.
3. Для разделения данных по сессиям в ней необходимо сделать поле SPID, в которой хранить для каждой сессии данные подставляя в это поле @@SPID и по нему фильтруя по сессиям.
4. Если сессия, которая создала эту таблицу дисконектиться, то она удалиться и другие сессии могут забыть, что они там хранили данные.
5. При отключении сессий, хранящих данные в ней, они обнуляться в такой таблице не будут на время жизни этой таблицы (т.е. до дисконекта создавшей ее сессии или же перегрузки сервера).
Исходя из вышеперечисленного, если все вышесказанное по MSSQL применимо к ASE, то мой совет забыть про ASA-шные глобальные времянки и вместо них пользоваться постоянными таблицами, разделяя в них данные по @@SPID и вызывая очистку таких таблиц явно из клиентского приложения или агентов, которые периодически могут проверять наличие в таких таблицах SPID, отсутствующих в списке подключенных сессий.
...
Рейтинг: 0 / 0
29.11.2004, 15:22
    #32804222
vooo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
По аналогии с MSSQL думаю так:
CREATE TABLE ##Table1 (...)
К сожалению с ASE 12.5 не работал, но в ASE 11.5 нет такой аналогии
В 11.5 работает конструкция create table tempdb..tableName<fld list> И как правильно сказали с данной таблицей нужно работать по SPID. Но опять таки - это ASE 11.5
...
Рейтинг: 0 / 0
30.11.2004, 09:59
    #32805144
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
1) #table -временные таблицы и так живут на время сессии , за некоторыми исключениями, а именно, временные таблицы, созданные в процедурах и триггерах, автоматически удаляются по выходу из них.

2) ##table - временных таблиц (как в MSSQL) в ASE нет.
Напоминаю, что в MSSQL их видят ВСЕ пользователи, и после ухода последней сессии, которая их использовала, таблица автоматически удаляется. Ну или что-то в этом роде.

3) Можно создавать невременную таблицу в tempdb (БЕЗ ДИЕЗА), только при этом ее будут видеть все ползователи и ее надо вручную удалять.

4) Можно использовать концепцию псевдовременной таблицы, при этом в PK таблицы добавляется поле, заполняемое @@spid-ом данной сессии и данная сессия использует только свои записи.

Кстати, в ASE со времен 11.5 в отношении временных таблиц ничего не изменилось, за исключением возможности иметь несколько баз tempdb для разных пользователей.
...
Рейтинг: 0 / 0
30.11.2004, 11:14
    #32805299
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
MasterZiv1) #table -временные таблицы и так живут на время сессии , за некоторыми исключениями, а именно, временные таблицы, созданные в процедурах и триггерах, автоматически удаляются по выходу из них.


похоже это то, что нужно
т.е. один раз я создаю таблицу #tname , а потом каждый коннект будет в ней видеть только "свои" данные ?
...
Рейтинг: 0 / 0
30.11.2004, 11:58
    #32805417
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Vovaka MasterZiv1) #table -временные таблицы и так живут на время сессии , за некоторыми исключениями, а именно, временные таблицы, созданные в процедурах и триггерах, автоматически удаляются по выходу из них.


похоже это то, что нужно
т.е. один раз я создаю таблицу #tname , а потом каждый коннект будет в ней видеть только "свои" данные ?
Нет. Вы каждый раз при коннекте к БД должны создать такую таблицу и она будет жить в пределах видимости, т.е. если она просто создана в коннекте, то она проживет до дисконнекта, если создана в ХП или триггере, то проживет до выхода из тела процедуры.
...
Рейтинг: 0 / 0
30.11.2004, 11:59
    #32805421
ASCRUS
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Дополнение - в ASE и MSSQL в отличие от ASA просто нужно привыкнуть, что некую часть логики должно выполнять клиентское приложение - создавать времянки, вызывать для инициализации нужные ХП и т.д. Вывести все эти действия на уровень самой БД без участия клиентского приложения не получится.
...
Рейтинг: 0 / 0
30.11.2004, 12:49
    #32805561
Vovaka
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
ASCRUSДополнение - в ASE и MSSQL в отличие от ASA просто нужно привыкнуть, что некую часть логики должно выполнять клиентское приложение - создавать времянки, вызывать для инициализации нужные ХП и т.д. Вывести все эти действия на уровень самой БД без участия клиентского приложения не получится.

Да уж, не на том начинали :)

Это как будто с хорошего джипа на БТР пересесть, вроде помощней, но в остальном никакому сравнению не поддается
...
Рейтинг: 0 / 0
30.11.2004, 19:34
    #32806555
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Vovaka MasterZiv1) #table -временные таблицы и так живут на время сессии , за некоторыми исключениями, а именно, временные таблицы, созданные в процедурах и триггерах, автоматически удаляются по выходу из них.


похоже это то, что нужно
т.е. один раз я создаю таблицу #tname , а потом каждый коннект будет в ней видеть только "свои" данные ?

нет. просто у каждого будет своя таблица #tname .
...
Рейтинг: 0 / 0
21.12.2004, 14:48
    #32837089
Diaflex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
MasterZiv
2) ##table - временных таблиц (как в MSSQL) в ASE нет.


Выполнил на Sybase ASE 12.0.0.4 ...

create table ##tmp(f1 int)
insert into ##tmp select 1
select * from ##tmp
drop table ##tmp

... и получил 1. Почему ты решил что в ASE их нет???
...
Рейтинг: 0 / 0
21.12.2004, 18:16
    #32837716
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
если открыть Sybase Central, то после создания #TNAME можно увидеть в в базе данных tempdb что за таблица была создана.(и какое у нее реальное имя)
...
Рейтинг: 0 / 0
21.12.2004, 18:22
    #32837728
gardenman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
use data
go

drop procedure tmp
go

create procedure tmp as
begin
	create table ##TEST (id int)
	insert into ##TEST values ( 1 )
	select * from ##TEST
end
go

tmp
go

select * from ##TEST
go


Код: plaintext
1.
2.
3.
4.
5.
( 1  row affected)
(return status =  0 )
Server Message:  Number   208 , Severity   16 
Server 'pnsybase', Line  1 :
##TEST not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output). 


## -в Sybase ASE совсе не то что в MS :))
...
Рейтинг: 0 / 0
21.12.2004, 19:50
    #32837844
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Diaflex MasterZiv
2) ##table - временных таблиц (как в MSSQL) в ASE нет.


Выполнил на Sybase ASE 12.0.0.4 ...

create table ##tmp(f1 int)
insert into ##tmp select 1
select * from ##tmp
drop table ##tmp

... и получил 1. Почему ты решил что в ASE их нет???

Да ты можешь свою временную таблицу хоть #####a назвать, но она от этого вести себя по-другому не станет.
...
Рейтинг: 0 / 0
21.12.2004, 19:56
    #32837857
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Пробуем раз
...
Рейтинг: 0 / 0
21.12.2004, 19:59
    #32837863
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Пробуем два (из первого соединения)
Код: plaintext
1.
2.
3.
4.
5.
6.
a1  |
----|
 1971 |

  1  row(s).


Пробуем три (из второго соединения)
Код: plaintext
1.
2.
3.
Server xxx Msg  208 , Level  16 , State  1 , Line  1 
##test1 not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).


Что и требовалось доказать, это не работает как в MSSQLServer.
...
Рейтинг: 0 / 0
21.12.2004, 20:11
    #32837871
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 как создать временную таблицу ?
Напоминаю, что в MSSQL
MSDN
Global temporary tables have two number signs (##) as the first characters of their names; they are visible to any user after they are created ; and they are deleted when all users referencing the table disconnect from SQL Server.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 как создать временную таблицу ? / 18 сообщений из 18, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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