powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASe 12.5.x set showplan on in procedure
6 сообщений из 6, страница 1 из 1
ASe 12.5.x set showplan on in procedure
    #35043782
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Господа,
столкнулся с ситуацией когда в одном случае set showplan on в теле процедуры срабатывает нормально, а в другом полностью игнорируется.
Кто-нибудь может сказать почему?

Заранее спасибо

Случай когда игнорируется:
create table #t1 (id int, i int)
go

declare @i int
select @i = 0
while @i < 100
begin
insert into #t1 values (@i + 1, @i+1)
select @i = @i+1
end
go

create index idx_1 on #t1(id)
go

create procedure dbo.test_show_plan_1
@id int
as
set showplan on
select *
from #t1
where id = isnull( @id, id)
go

execute dbo.test_show_plan_1 10

drop procedure dbo.test_show_plan_1
go


Случай когда работает (помещаю создание таблицы, наполнение её данными и создание индекса в тело процедуры)

create procedure dbo.test_show_plan_2
@id int
as
create table #t2 (id int, i int)

declare @i int
select @i = 0
while @i < 100
begin
insert into #t2 values (@i + 1, @i+1)
select @i = @i+1
end

create index idx_2 on #t2(id)

set showplan on
select *
from #t2
where id = isnull( @id, id)
go


execute dbo.test_show_plan_2 10

drop procedure dbo.test_show_plan_2
go
...
Рейтинг: 0 / 0
ASe 12.5.x set showplan on in procedure
    #35043885
это может быть багом или "фичей".
когда-то натыкались на то, что print в процедуре не работает после строки содержащей комментарий "--"...
...
Рейтинг: 0 / 0
ASe 12.5.x set showplan on in procedure
    #35044300
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да, похоже что багафича :-)

set showplan on в теле процедуры работает только если в этой же самой процедуре создаётся индекс на таблицу которая будет участвовать в запросе.

Обходным путём может быть:
create procedure dbo.test_show_plan_1
@id int
as
create table #t(id int)
create index idx_p on #t(id)
set showplan on
select *
from #t1
where id = isnull( @id, id)
where id = @id
and not exists (select 1 from #t)
go
...
Рейтинг: 0 / 0
ASe 12.5.x set showplan on in procedure
    #35044306
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с новым годомэто может быть багом или "фичей".
когда-то натыкались на то, что print в процедуре не работает после строки содержащей комментарий "--"...

Не поленился проверить print в процедуре после строки с комментарием.
В 12.5.4 работает.
...
Рейтинг: 0 / 0
ASe 12.5.x set showplan on in procedure
    #35049841
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kru пишет:
> Господа,
> столкнулся с ситуацией когда в одном случае set showplan on в теле
> процедуры срабатывает нормально, а в другом полностью игнорируется.

Не знаю, почему не работает, знаю только что внутри ставить showpan
бессмысленно, надо ставить при вызове.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ASe 12.5.x set showplan on in procedure
    #35050542
Kru
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZiv
Kru пишет:
> Господа,
> столкнулся с ситуацией когда в одном случае set showplan on в теле
> процедуры срабатывает нормально, а в другом полностью игнорируется.

Не знаю, почему не работает, знаю только что внутри ставить showpan
бессмысленно, надо ставить при вызове.
Posted via ActualForum NNTP Server 1.4

Если в процедуре создаётся временная таблица и индекс к ней, то set shoplan on + set fmt only покажут скан по ней, а вот set shoplan on из тела процедуры покажет использование индекса.

Пример:

create procedure dbo.test_plan
@p int
as
create table #t1 (id int, i int)

declare @i int
select @i = 1
while @i < 1000
begin
insert into #t1 values (@i + 1, @i+1)
select @i = @i+1
end

create index idx_1 on #t1(id)

set showplan on
select * from #t1 where id = @p
go


set showplan on
go
set fmtonly on
go
exec dbo.test_plan @p = 10

Покажет скнирование таблицы


exec dbo.test_plan @p = 10 покажет использование индекса.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / ASe 12.5.x set showplan on in procedure
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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