Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Как можно сделать подобие вложенного курсора / 10 сообщений из 10, страница 1 из 1
20.02.2009, 13:22
    #35829669
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
Задача примерно такая: Есть несколько баз на сервере! Надо сделать "update all statistics" по всем таблицам во всех базах!

P.S. "update all statistics" взято как пример!!! Но идея примерно такая!
...
Рейтинг: 0 / 0
20.02.2009, 15:16
    #35829991
_makSim
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
А почему подобие? Можно вложенный, я думаю.
Вот скрипт для одной БД:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
use mydb
go

declare c cursor for select name from sysobjects where type='U'
go
declare @n varchar( 30 )
open c
fetch c into @n
while @@sqlstatus= 0  begin
  exec ('update statistics '+@n)
  select @n 
  fetch c into @n
end
close c
go
deallocate cursor c
...
Рейтинг: 0 / 0
20.02.2009, 15:51
    #35830087
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
_makSim,

Для одной БД, вопросов нет! а вот как с несколькими сделать?
...
Рейтинг: 0 / 0
20.02.2009, 18:01
    #35830412
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
cherrex_Den_makSim,

Для одной БД, вопросов нет! а вот как с несколькими сделать?

можно вообще без курсоров
вот так, но под рукой нет Sybase чтобы проверить:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
create table tempdb..obj (cmd varchar( 255 ))
go
create table #db (name varchar( 50 ))
go
insert into #db(name) 
select name from master..sysdatabases where name not in ('master','model','tempdb','sybsystemprocs')
go
declare @cmd varchar( 255 )
declare @db varchar( 50 )
while exists (select top  1  name from #db)
begin
	select @db=(select top  1  name from #db)
	select @cmd='insert into tempdb..obj(cmd) select ''use '+@db+'; update statistics ''+name+'';'' from '+@db+'..sysobjects where type=''U'''
	exec (@cmd)
	delete #db where name=@db
end
go
create index idx1 on tempdb..obj(cmd)
go
declare @cmd varchar( 255 )
while exists (select top  1  cmd from tempdb..obj)
	begin
		select @cmd=(select top  1  cmd from tempdb..obj)
		exec (@cmd)
		delete tempdb..obj where cmd=@cmd
	end 
go
drop table #db
drop table tempdb..obj
go
...
Рейтинг: 0 / 0
20.02.2009, 18:14
    #35830438
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
komrad, СПАСИБО!!! Дальше разберусь!

Ну а вообще такое как "вложенный курсор" возможно в ASE 12.5(или 15.0.2)
...
Рейтинг: 0 / 0
20.02.2009, 18:20
    #35830448
komrad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
cherrex_Denkomrad, СПАСИБО!!! Дальше разберусь!

Ну а вообще такое как "вложенный курсор" возможно в ASE 12.5(или 15.0.2)
а кто запрещает попробовать?
...
Рейтинг: 0 / 0
20.02.2009, 21:48
    #35830612
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
cherrex_Den пишет:

> Задача примерно такая: Есть несколько баз на сервере! Надо сделать
> "update all statistics" по всем таблицам во всех базах!

Открой для себя наконец технологию "прототипирования":

Код: plaintext
1.
2.
3.
select 'select * from '+ name +'
'+'go'
from sysobjects where type = 'U' and name like 'A%'

Код: plaintext
1.
2.
3.
select 'update index statistics on '+ name +'
'+'go'
from sysobjects where type = 'U' and name like 'A%'

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.02.2009, 21:49
    #35830613
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
cherrex_Den пишет:

> Для одной БД, вопросов нет! а вот как с несколькими сделать?

При "прототипировании" -- Всего лишь три раза выполнить "косвенно" результат
вмето двух.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
20.02.2009, 21:49
    #35830615
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
cherrex_Den пишет:

> Ну а вообще такое как "вложенный курсор" возможно в ASE 12.5(или 15.0.2)
Возможно.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
21.02.2009, 00:48
    #35830746
cherrex_Den
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ASE 12.5 Как можно сделать подобие вложенного курсора
Не совсем понял MasterZiv`а, но все равно спасибо!

Собрав все во едино, и курсоры и скрипт komrad`а, цель была достигнута. (komrad`у отдельное спасибо!)

P.S. "select @db=(select top 1 name from #db)" и "while exists (select top 1 name from #db)"
даже в 15.0.2 не прокатывает. Ругается на некоректный синтаксис около top. Хотя в 15.0.2 top уже есть!
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASE 12.5 Как можно сделать подобие вложенного курсора / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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