powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создание глобальной временной таблицы в процедуре ASE 12/15
14 сообщений из 14, страница 1 из 1
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35648970
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть такой код внутри процедуры, если временная таблица отсутствует - она создается.
На сколько я слышал такие временные таблицы актуальны до перзагрузки сервера ??
На сколько безпроблемна будет работа такой процедуры в будущем ??

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
begin

....................

  --Создание временной таблицы
  if not exists (select  1  from tempdb..sysobjects where type = 'U' and name = 'dov_temp') and @firstrun =  1 
  begin
  create table tempdb..dov_temp(ID numeric( 15 ) not  null  ...................................................       ,constraint pk_dov_temp primary key nonclustered( ID ))  
  end
  --Очистка временной таблицы
  else if @firstrun =  1 
    delete from tempdb..dov_temp

...........................

end
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35649865
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD пишет:
> Есть такой код внутри процедуры, если временная таблица отсутствует -
> она создается.
> На сколько я слышал такие временные таблицы актуальны до перзагрузки
> сервера ??

Нет. До выхода из процедуры.

> На сколько безпроблемна будет работа такой процедуры в будущем ??
>

Зависит от процедуры.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35649949
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вся проблема у меня вот в чём :

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
--Создание временной таблицы
  if not exists (select  1  from tempdb..sysobjects where type = 'U' and name = 'dov_temp') and @firstrun =  1 
  begin

  create table tempdb..dov_temp(ID numeric( 15 ) not null
                                .................................
                               ,constraint pk_dov_temp primary key nonclustered ( ID ))
  
    
  end
  --Очистка временной таблицы
  else if @firstrun =  1 
    delete from tempdb..dov_temp

Процедура считает, что таблица при проверке с помощью "if not exists", существует и при её очистке : delete from tempdb..dov_temp
пишет ошибку :
tempdb..dov_temp not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

При этом в tempdb висит временная таблица : guest.dov_temp
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35649997
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все таки они похоже после выхода существуют, это созданные с решеткой (#) дропаются автоматически.
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35650216
cherrex_Den
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv
JenyaD пишет:
> Есть такой код внутри процедуры, если временная таблица отсутствует -
> она создается.
> На сколько я слышал такие временные таблицы актуальны до перзагрузки
> сервера ??

Нет. До выхода из процедуры.

> На сколько безпроблемна будет работа такой процедуры в будущем ??
>

Зависит от процедуры.


http://infocenter.sybase.com/help/index.jsp?topic=/com.sybase.help.ase_15.0.2/title.htm

There are two kinds of temporary tables:

Tables that can be shared among Adaptive Server sessions

You create a shareable temporary table by specifying tempdb as part of the table name in the create table statement. For example, the following statement creates a temporary table that can be shared among Adaptive Server sessions:

create table tempdb..authors
(au_id char(11))

drop table tempdb..authors

Adaptive Server does not change the names of temporary tables created this way. The table exists until the current session ends or until its owner drops it using drop table.

Tables that are accessible only by the current Adaptive Server session or procedure

You create a nonshareable temporary table by specifying a pound sign (#) before the table name in the create table statement. For example:

create table #authors
(au_id char (11))

The table exists until the current session or procedure ends, or until its owner drops it using drop table.

Похоже JenyaD прав!

JenyaDПроцедура считает, что таблица при проверке с помощью "if not exists", существует


А второе условие(and @firstrun = 1) правильное?
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35650242
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD пишет:
> Все таки они похоже после выхода существуют, это созданные с решеткой
> (#) дропаются автоматически.

У вас без решётки ? У... как всё запущено-то ...
(я что-то просмотрел это).

Постоянные таблицы в tempdb (не временные, вы как раз постоянную и создаёте)
живут до момента перегрузки сервера. Во время перегрузки сервера
tempdb создаётся заново. Как и любая другая БД, tempdb создаётся путём
копирования в неё базы данных model.

Вывод: вам нужна постоянная таблица в tempdb - создайте её в БД model.
Чтобы не перегружать сервер, такую же таблицу создайте и в tempdb.
И ваша таблица просто ВСЕГДА БУДЕТ СУЩЕСТВОВАТЬ.

Создавать невременные таблицы в процедурах ... ну, как бы это
сказать, плохо в общем. Не надо этого.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35650247
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD пишет:

> Процедура считает, что таблица при проверке с помощью "if not exists",
> существует и при её очистке : delete from tempdb..dov_temp
> пишет ошибку :
> tempdb..dov_temp not found. Specify owner.objectname or use sp_help to
> check whether the object exists (sp_help may produce lots of output).
>
> При этом в tempdb висит временная таблица : guest.dov_temp

Понимаете, не зря люди придумали временные таблицы.
Процедуры создаются и выполняются в три этапа. Компилируются,
ресолвятся. Оптимизируются. Вы же будете заставлять перересолвить
сервер эту вашу таблицу. К тому же, если таблицы нет, процедура,
на сколько я помню, просто не создастся. В общем, лучше так не делать.
Лучше пользоваться постоянными таблицами в tempdb из model.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35651328
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cherrex_DenА второе условие(and @firstrun = 1) правильное?
Да вроде, это первый запуск рекурсивной процедуры.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
create proc f_FILL_RECURSE
  @id       numeric( 15 ),
  @firstrun       bit
as
begin

.............

end 

Код: plaintext
execute f_FILL_RECURSE  59 , 1 

MasterZivЛучше пользоваться постоянными таблицами в tempdb из model.
Похоже так и нужно будет сделать. Мне нужна временная таблица, которую будет заполнять каждое вложение рекурсивно вызываемой процедуры, а затем эта процедура вернет select из этой временной таблицы. Если я создаю временную таблицу с # то с ней проблемы во вложенных процедурах, так как она видима только в рамках одной процедуры.
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35651351
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZiv Создавать невременные таблицы в процедурах ... ну, как бы это
сказать, плохо в общем. Не надо этого.
Я это и почувствовал сделав это. Удаляя временную таблицу и запуская процедуру под разными аккаунтами.
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35652173
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD пишет:
> Похоже так и нужно будет сделать. Мне нужна временная таблица, которую
> будет заполнять каждое вложение рекурсивно вызываемой процедуры, а затем
> эта процедура вернет select из этой временной таблицы.

Что ограничение на рекурсию -- 16 вызовов есть помните ?

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

Нет, это не так. Просто "дочернюю" процедуру надо правильно создавать.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35652252
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MasterZivЧто ограничение на рекурсию -- 16 вызовов есть помните ?
Есть, я тут уже этот вопрос задавал, но это не критически. Конечно можно сделать и в виде цикла, однако я решил попробовать старую добрую рекурсию.

MasterZivНет, это не так. Просто "дочернюю" процедуру надо правильно создавать.
У меня и главная и дочерняя процедуры в одном лице, только вышеупомянутый параметр позволяет судить о первом запуске. Интересно, что означает правильно ?

Да в SQL Anywhere было поудобнее...
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35652527
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Решил пойти по первоначальному пути - создавать временную таблицу с # вне тела процедуры.
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35652790
JenyaD
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ещё момент, когда я создаю процедуру, а временная таблица не существует ещё.
При этом появляется ошибка :
#dov_temp not found. Specify owner.objectname or use sp_help to check whether the object exists (sp_help may produce lots of output).

Как, кроме принудительного создания временной таблицы это можно обойти ??
...
Рейтинг: 0 / 0
Создание глобальной временной таблицы в процедуре ASE 12/15
    #35653153
Фотография komrad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JenyaD
Как, кроме принудительного создания временной таблицы это можно обойти ??
а как ты считаешь должен поступить сервер при компиляции твоей процы и отсутствии объекта?
выхода два :
1) не использовать временную таблицу
2) создавать временные таблицы перед процедурами их использующими
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Создание глобальной временной таблицы в процедуре ASE 12/15
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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