powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9, Временная таблица
10 сообщений из 10, страница 1 из 1
ASA 9, Временная таблица
    #34551144
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день всем.

На ASA 9.0.2.3420 используется СП такого типа:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
ALTER PROCEDURE "usr"."spGetData"(in @VC1 varchar( 3 ), ..., out @DW integer,out @UTime double)
begin
  select * into #tempData
    from usr.Data  where
    v_code1 = @Vc1 and
    ...;
  if not exists(select  1  from #tempData) then
    return - 1 ;
  
  else
    ...
    Set @DW=…;
    Set @UTime = …;
  end if;
  return sqlcode
end
При вызове этой процедуры очень часто выдается ошибка: элемент #tempData уже существует . На ASA 6.0.4 все работало без проблем.
Вопрос: почему это происходит? Насколько я знаю, в конструкции типа
Код: plaintext
select * into #tempData 
создается локальная временная таблица, которая, согласно документации, существует только во время выполнения этой процедуры.
Попытка удаления этой таблицы
Код: plaintext
drop table usr.#tempData
говорит, что такой таблицы не существует.
Кроме этого, разрыв соединения и даже перезапуск сервера результатов не дали.

Если это какие-то сознательные изменения в логике работы сервера, то ткните меня, пожалуйста, носом в то место документации, где это описано.
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34551457
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В конструкции типа select * into #tempData не создается никакой таблицы,
а идет выборка из таблицы #tempData, которая должна уже существовать.

#tempData должна создаваться до вызова вашей процедуры.
create table #tempData .......
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34551474
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот выдержка из документации по поводу select ... into:

SELECT [ ALL | DISTINCT ] [ row-limitation ] select-list
[ INTO { hostvar-list | variable-list | table-name } ]
...
INTO table-name This clause is used to create a table and fill it with data.

If the table name starts # then it is created as a temporary table. Otherwise, the table is created as a permanent base table
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34551709
V.V.L.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
1. Может повторный вызов процедуры происходит в рамках одной транзакции с первым вызовом (проблема на клиенте) ?
2. А
Код: plaintext
if not exists(select * from usr.Data where ... ) then
не устроит по логике ?
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34552078
antand
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Извиняюсь. INTO не увидел. Пятница.
В документации написано, что временные таблицы существуют в пределах compound statement
begin end. Процедура это тоже begin end.
Я бы явно создавал таблицу вначале процедуры, в конце удалял. Можно еще проверку на существование сделать.
И еще(хотя может это и лишнее) переделал бы код, чтобы всегда до конечного end дело доходило.
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34552087
Vinogradov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
antandВ конструкции типа select * into #tempData не создается никакой таблицы,
а идет выборка из таблицы #tempData, которая должна уже существовать.

#tempData должна создаваться до вызова вашей процедуры.
create table #tempData .......

ерунда
Именно так и создается временная таблица
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34552289
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AkniПри вызове этой процедуры очень часто выдается ошибка: элемент #tempData уже существует . На ASA 6.0.4 все работало без проблем.
Вопрос: почему это происходит?Ты правильно догадался - изменение логики работы с времянками. Произошло между 7.0.2 и 7.0.3, так что не удивительно что никто уже не помнит этих приколов. :)

AkniНасколько я знаю, в конструкции типа
Код: plaintext
select * into #tempData 
создается локальная временная таблица, которая, согласно документации, существует только во время выполнения этой процедуры. Все верно, но в 7.0.2 и ниже был еще дополнительный недокументированый эффект - если временная таблица уже существует, то она неявно убивается и переопределяется заново с новым набором колонок (если нужно) А в 7.0.3 неявное убитие времянки убрали.

AkniПопытка удаления этой таблицы
Код: plaintext
drop table usr.#tempData
говорит, что такой таблицы не существует.Времянки больше не принадлежат юзеру. Убери владельца и сможешь убить таблицу.

AkniКроме этого, разрыв соединения и даже перезапуск сервера результатов не дали. А вот это уже глюк. Видел его пару раз, но не смог его специально повторить. Выглядит так - подключаешься через dbisqlg создаешь и работаешь с сессионой времянкой, закрываешь dbisqlg а в следющей сессии времянка все еще существует. Даже более того, если теперь к базе подключится Централом от десятки, в списке таблиц можно будет увидеть этот самый #tmp! А вот Централ от девятки эту таблицу не видит, но drop table #tmp отрабатывает.
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34552406
L0cat0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl AkniПри вызове этой процедуры очень часто выдается ошибка: элемент #tempData уже существует . На ASA 6.0.4 все работало без проблем.
Вопрос: почему это происходит?Ты правильно догадался - изменение логики работы с времянками. Произошло между 7.0.2 и 7.0.3, так что не удивительно что никто уже не помнит этих приколов. :)


помним ! - проблема в области видимости ограниченной в if
для нормальной видимости временной таблицы внутри "if"
ее надо обязательно декларировать

когда-то давно обсуждалось на саппорте

Удачи!
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34556219
Синтаксис Watcom работает без проблем
Declare local temporary table ...

#temp - это из transact sql
мб оно и работает но никогда в ASA не пользовал
...
Рейтинг: 0 / 0
ASA 9, Временная таблица
    #34556983
Akni
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White Owl Времянки больше не принадлежат юзеру. Убери владельца и сможешь убить таблицу.

Код: plaintext
drop table #tempData
Увы, тоже не работает. говорит, таблица не найдена.

Всем спасибо большое за комментарии, будем менять код
...
Рейтинг: 0 / 0
10 сообщений из 10, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASA 9, Временная таблица
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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