2013-04-09 10 views
5

После мой код:Как писать MySQL хранимые процедуры с использованием как оператора

 DELIMITER $$ 

    CREATE DEFINER=`root`@`localhost` PROCEDURE `employee_with_asset`(IN name  VARCHAR(250)) 
    BEGIN 
    SELECT a.Asset_code,a.name as name1,a.type,a.description,`purchase date`, 
    `amc availability`,`amc renewal`,`employee Id`,b.Name FROM `asset_details` a, 
    employee b WHERE b.Name LIKE '%' + @name + '%' and a.`assigned to`=b.`employee Id`; 
    END 

Он показывает ошибку вблизи LIKE. Как это решить.

+0

Вы должны использовать 'CONCAT()' вместо «+» – JoDev

ответ

14

конкатенации в MySQL это делается с помощью CONCAT()

LIKE CONCAT('%', @name , '%') 

ПОЛНЫЙ ЗАЯВЛЕНИЕ

DELIMITER $$ 
CREATE DEFINER=`root`@`localhost` PROCEDURE `employee_with_asset` 
(
    IN _name  VARCHAR(250) 
) 
BEGIN 
    SELECT a.Asset_code, 
      a.name as name1, 
      a.type, 
      a.description, 
      `purchase date`, 
      `amc availability`, 
      `amc renewal`, 
      `employee Id`, 
      b.Name 
    FROM `asset_details` a 
      INNER JOIN employee b 
       ON a.`assigned to` = b.`employee Id` 
    WHERE b.Name LIKE CONCAT('%', _name , '%'); 
END $$ 
DELIMITER ; 
+0

+1 Это как ответ я написал (и удалить, чтобы не дублировать). Поэтому я думаю, что это будет трюк. Вы быстро ... – JoDev

+0

@J W: Это не работает. –

+0

какие ошибки вы получаете? он не работает, может иметь несколько значений –

0

Ответ Джона Ву является правильным, но если вы не используете utf8_general_ci коллекции, вы должны бросить коллекцию после WHERE (после каждого условия, если у вас есть несколько условий), так же как и сбор столбца, который вы сравниваете с таким образом

... WHERE name LIKE CONCAT('%', @name , '%') COLLATE utf8_unicode_ci 

или несколько условий

... WHERE name LIKE CONCAT('%', @name , '%') COLLATE utf8_unicode_ci 
OR job LIKE CONCAT('%', @name , '%') COLLATE utf8_unicode_ci ...