2012-04-27 2 views
3

У меня есть рекурсивные MySQL хранимые процедуры, для которых я поставил max_sp_recursion_depth=10.Как получить глубину в рекурсии процедуры хранения mysql?

Теперь, без установки локальной переменной, я хотел бы знать, что такое рекурсия-х уровень в течение одного исполнения.

Я думаю, что, конечно, есть переменная сеанса, которая хранит глубину (как еще вы знаете, когда достигнете максимального уровня), но я не смог ее найти. Я бы не стал использовать переменную, чтобы сделать это постепенно. Как я могу узнать эту (если есть) системную переменную?

+0

Почему вы используете рекурсию? Возможно, вы можете избежать этого с другой структурой данных. – eggyal

+2

Это не мое дело .... OT –

+0

Позвольте мне перефразировать: почему вы используете рекурсию? SQL не предназначен для использования таким образом. Вы почти наверняка можете избежать этого с другой структурой данных. – eggyal

ответ

0

Я знаю, что ты конкретно спросил, как это сделать без пользователя создал переменное - но для других встретив эту мысль, было бы целесообразно разместить, как сделать это с один, как это довольно просто:

CREATE PROCEDURE sp_recursive 
BEGIN 
    // ... DECLAREs here 

    -- Set maximum recursion depth (max is 255) 
    SET @@SESSION.max_sp_recursion_depth = 10; 

    -- Increment current recursion depth 
    SET @recursion_depth = IFNULL(@recursion_depth + 1, 0); 

    -- ... More stored procedure code 

    -- Decrement current recursion depth. Note: Care must be taken to ensure this line 
    -- is *always* executed at the end of the stored procedure. 
    SET @recursion_depth = @recursion_depth - 1; 
END 

Объяснение

@recursion_depth контекст сеанса переменная увеличивается на вышеприведенном SET заявление каждый раз, когда вводится хранимая процедура. При первом вводе переменная не инициализируется и поэтому имеет значение NULL - это проверяется на IFNULL(), который переназначает ее в этом случае равным нулю. В конце хранимой процедуры непосредственно перед выходом, глубина должна быть уменьшена.

Дальнейшие заметки

Стоит отметить, что SQL Server делает обеспечивает встроенную @@NESTLEVEL переменным для выполнения выше - но, к сожалению, MySQL, кажется, не имеет эквивалент.

Смежные вопросы