Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> динамический SQL: возможно ли реализовать в ХП? 
:(
    Опции темы
posdnyaa
Дата 23.1.2008, 01:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 13
Регистрация: 18.12.2007

Репутация: нет
Всего: нет



Здравствуйте. 
В MySQL Query Browser (версия сервера mySql 5.0.18-nt) создаю хранимую процедуру, которая выбирает из таблицы все столбцы и осуществляет сортировку по переданному во входном параметре имени столбца
Код

CREATE PROCEDURE `SelectAllCustomersOrderBy` (IN pOrdBy VARCHAR(100))
BEGIN
  Select * FROM Customers ORDER BY pOrdBy;
END $$

Так вот приведенный пример НЕ РАБОТАЕТ. Если вместо параметра задать явно  имя столбца 
Код
…..
  Select * FROM Customers ORDER BY Name;
…..

То процедура работает.
Подскажите пожалуйста, можно ли и (если да) как осуществлять сортировку в зависимости от входного параметра?
И сюда же: можно ли во входном параметре передать, а потом использовать, имя таблицы.
Например, если мне надо использовать в хран. процедуре запрос 
Код
  Select * FROM SomeTable;
, то можно ли во входном параметре передать имя таблицы и использовать его в запросе.
Спасибо.

PM MAIL   Вверх
skyboy
Дата 23.1.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 41
Всего: 260



если речь не о функции/триггере, то можно воспользоваться prepared statesments
PM MAIL   Вверх
sTa1kEr
Дата 23.1.2008, 14:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


9/10 программиста
***


Профиль
Группа: Завсегдатай
Сообщений: 1553
Регистрация: 21.2.2007

Репутация: 7
Всего: 146



Цитата(posdnyaa @  23.1.2008,  02:06 Найти цитируемый пост)
И сюда же: можно ли во входном параметре передать, а потом использовать, имя таблицы.

Никак нельзя.

Цитата(posdnyaa @  23.1.2008,  02:06 Найти цитируемый пост)
Подскажите пожалуйста, можно ли и (если да) как осуществлять сортировку в зависимости от входного параметра?

Динамически нельзя. Можно только если перечислить все возможные варианты запросов с сортировкой.
Код

CREATE PROCEDURE `SelectAllCustomersOrderBy` (IN pOrdBy VARCHAR(100))
BEGIN
   CASE pOrdBy
      WHEN 'column1' THEN Select * FROM Customers ORDER BY `column1`;
      WHEN 'column2' THEN Select * FROM Customers ORDER BY `column2`;
      WHEN 'column3' THEN Select * FROM Customers ORDER BY `column3`;
   END CASE;
END $$


Цитата(skyboy @  23.1.2008,  02:25 Найти цитируемый пост)
если речь не о функции/триггере, то можно воспользоваться prepared statesments 

К prepared statesments применяется тоже правило. Можно биндить только строковые константы! Динамически менять колонки, операторы или ключевые слова - нельзя.

Это сообщение отредактировал(а) sTa1kEr - 23.1.2008, 14:05
PM MAIL   Вверх
vi_k
Дата 24.1.2008, 04:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 29.12.2007

Репутация: нет
Всего: нет



Где-то я уже встречал этот вопрос smile Да, лучше здесь задавать, и красивше, и ребята пограмотнее ;)

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | MySQL | Следующая тема »


 




[ Время генерации скрипта: 0.0438 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.