SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 17.05.2010 13:41:14

AleGol
Участник
Зарегистрирован: 17.05.2010
Сообщений: 1

Помогите переложить скрипт MSSQL в MySQL

Изучаю MySQL, опыта работы как в нем, так и в MSSQL мало
Нашел скрипт поиска кратчайшего расстояния для MSSQL.
<script>
declare @t table (a varchar(10), b varchar(10))
insert into @t
select 'a1','a2' union
select 'a2','a3' union
select 'a3','a4' union
select 'a2','a4'

declare @start varchar(10), @end varchar(10)
select @start='a1',@end='a4'

-- обход графа
set nocount on
declare @v table (a varchar(10), step int, path varchar(8000))
declare @step int set @step=0

insert into @v values(@start,@step,@start)

while @@rowcount > 0 begin
    set @step=@step+1

    insert into @v
        select b,@step,v.path+' - '+cast(t.b as varchar) from @t t
        inner join @v v on t.a=v.a and step=@step-1
end

-- ответ(ы)
select top 1 with ties path from @v
where a = @end
order by step
</script>
Понимаю, что он не самый идеальный, но как вариант устраивает. На MSSQL работает прекрасно.
Для начала я понял, что объявление переменной через DECLARE не отрабатывает. Устанавливаю через SET. Хотя аналог для declare @v table могу придумать только один CREATE TEMPORARY TABLE.
Далее системной переменную @@rowcount следует заменить SET @row_count = select count(*) from...
Единственное что не могу понять - как мне встроить итерацию. Приходит на ум - создать встроенную процедуру через CREATE PROCEDURE, но тут столкнулся со следующимися проблемами:
1 - процедура после вызова встраивается в MySQL, и не могу понять хорошо это или плохо
2 - вызывая процедуру через CALL my_proc у меня вылетает ошибка со стеком
MySQL Database Error: Thread stack overrun:  6436 bytes used of a 131072 byte stack, and 128000 bytes needed.  Use 'mysqld -O thread_stack=#' to specify a bigger stack.

Подскажите, правильно ли я рассуждаю при перекладывании скрипта и что делать с итерацией

Отредактированно AleGol (17.05.2010 13:43:32)

Неактивен

 

#2 17.05.2010 15:03:39

paulus
Администратор
MySQL Authorized Developer and DBA
Зарегистрирован: 22.01.2007
Сообщений: 6757

Re: Помогите переложить скрипт MSSQL в MySQL

Я Вам настоятельно рекомендую написать всё самостоятельно: проблема именно
в том, что в MSSQL мало опыта. Например, @@row_count — это не количество
строк в таблице. И без чтения документации этот вопрос останется открытым wink

Стек действительно нужно поднять: значение по умолчанию в 5.1 в MySQL подняли,
чтобы работали процедуры, но в debian оставили старое значение, и возникают
такие проблемы.

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson