Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Хранимые процедуры MySQL - переменные

3.0K
24 марта 2011 года
GoldMan
104 / / 15.08.2005
Есть такая процедура:
Код:
DELIMITER $$

USE `gltltd_comersant`$$

DROP PROCEDURE IF EXISTS `filesedit_getLetter`$$

CREATE DEFINER=`root`@`localhost` PROCEDURE `filesedit_getLetter`(IN fieldName VARCHAR(255), IN loginName VARCHAR(255))
    BEGIN
    SELECT UPPER(SUBSTR(fieldName,1,1)) AS letter FROM users INNER JOIN mod_filesedit_user_atrib ON (users.id = mod_filesedit_user_atrib.id_users) INNER JOIN mod_filesedit ON (mod_filesedit.id = mod_filesedit_user_atrib.id_mod_filesedit) WHERE (users.login = loginName) GROUP BY UPPER(SUBSTR(fieldName,1,1)) ORDER BY UPPER(SUBSTR(fieldName,1,1));
    END$$

DELIMITER ;


Вызываю ее:
 
Код:
CALL filesedit_getLetter('mod_filesedit.l_name','userName')


Подскажите пожалуйста как в процедуре, в запросе использовать первый параметр fieldName, как название поля таблицы.

Заранее спасибо!
277
24 марта 2011 года
arrjj
1.7K / / 26.01.2011
Используй prepare и execute. (Другие варианты в голову не приходят)
Пример:
Код:
CREATE TABLE test(id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, test text);
INSERT INTO test(test) VALUES ('hello'),('ololo'),('bugaga');
delimiter $$
CREATE PROCEDURE proc1(IN fieldname text,IN param2 text)
BEGIN
SET @s=concat('select ',fieldname,' from test where test.test like \'',param2,'\'');
PREPARE mselect FROM @s;
EXECUTE mselect;
deallocate PREPARE mselect;
END$$
delimiter ;
CALL proc1('id','%lo%');


//А топик бы перенести в Базы данных и язык SQL
3.0K
24 марта 2011 года
GoldMan
104 / / 15.08.2005
Не знаю... самый ли оптимальный это вариант... но он работает...
Спасибо! Выручили!
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог