Новости
Документация
Download
Webboard
Поиск
FAQ/ЧаВо
Обратная связь




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, версию программного обеспечения, по которому возникает вопрос, текст возникающих ошибок, и др.)
Помните, чем конкретнее Вы опишете ситуацию, тем больше шансов получить реальную помощь.
 Имя:
 E-mail:
 Тема:
 Текст:
Код подтверждения отправки: Code
32858



РЕКЛАМА НА САЙТЕ
  Создание сайтов | |