







|
MySQL.RU - Webboard
Вернуться
Использование входного параметра в хранимой п (posdnyaa) 23/01/2008 - 01:09:37
Re: Использование входного параметра в хранимой п (vi.k) 23/01/2008 - 10:16:19
Re: Использование входного параметра в хранимой п (Сергей) 24/01/2008 - 12:39:32
> Original message text:
> From: posdnyaa - 23/01/2008 - 01:09:37
> Subject:Использование входного параметра в хранимой п
> -----------------
> Здравствуйте.
> В MySQL Query Browser (версия сервера mySql 5.0.18-nt) создаю хранимую процедуру, которая выбирает из таблицы все столбцы и осуществляет сортировку по переданному во входном параметре имени столбца
> [code]
> CREATE PROCEDURE `SelectAllCustomersOrderBy` (IN pOrdBy VARCHAR(100))
> BEGIN
> Select * FROM Customers ORDER BY pOrdBy;
> END $$
> [/code]
> Так вот приведенный пример НЕ РАБОТАЕТ. Если вместо параметра задать явно имя столбца [code]…..
> Select * FROM Customers ORDER BY Name;
> …..[/code]
> То процедура работает.
> Подскажите пожалуйста, можно ли и (если да) как осуществлять сортировку в зависимости от входного параметра?
> И сюда же: можно ли во входном параметре передать, а потом использовать, имя таблицы.
> Например, если мне надо использовать в хран. процедуре запрос [code] Select * FROM SomeTable;[/code], то можно ли во входном параметре передать имя таблицы и использовать его в запросе.
> Спасибо.
>
>
>
From: Сергей - 24/01/2008 - 12:39:32
Subject:Использование входного параметра в хранимой п
-----------------
Ну, "нельзя :(" - это уж слишком категорично :)
Сортировку осуществлять можно, но, если процедура не понимает параметр как имя или номер поля, надо воспользоваться обходным путем.
Наиболее простым, на мой взгляд, решением является передача в качестве параметра условия для функции CASE, это несколько утяжелит тело процедуры, но позволит получить желаемый результат. Выглядит это примерно так:
[code]
CREATE PROCEDURE `SelectAllCustomersOrderBy`(IN pOrdBy int)
BEGIN
CASE
WHEN pOrdBy = 1
THEN
SELECT *
FROM Customers
ORDER BY 1;
WHEN pOrdBy = 2
THEN
SELECT *
FROM Customers
ORDER BY 2;
ELSE
SELECT *
FROM Customers
ORDER BY 3;
END CASE;
END $$
[/code]
[Это сообщение - спам!]
Последние сообщения из форума
Уважаемые посетители форума MySQL.RU!
Убедительная просьба, прежде чем задавать свой вопрос в этом форуме, обратите внимание на разделы:
- ответы на наиболее часто задаваемые вопросы - FAQ
- раздел документация
- раздел поиск по сообщениям форума и документации
Также, старайтесь наиболее подробно указывать свою ситуацию (версию операционной системы, версию MySQL,
версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
32858
|
|