Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como passar uma lista de strings no procedimento armazenado do MySQL?


Seu amigo aqui é FIND_IN_SET, espero. Encontrei esse método pela primeira vez nesta pergunta:também abordado nesta pergunta MYSQL - Procedimento armazenado utilizando strings separadas por vírgulas como entrada variável

A documentação do MySQL para FIND_IN_SET está aqui http ://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_find-in-set

Assim, seu procedimento se tornará
CREATE DEFINER=`root`@`localhost` 
PROCEDURE `search_equipment`(
    IN equip VARCHAR(100), 
    IN category VARCHAR(255)
)
BEGIN
    SELECT *
    FROM Equipment
    WHERE e_description LIKE CONCAT("%",equip,"%")
    AND FIND_IN_SET(e_type,category)
END

Isso depende da string de categoria ser uma lista delimitada por vírgulas e, portanto, seu código de chamada se torna
String type = "I.T. Equipment,Office Supply";

CALL search_equipment('some equipment', type);

(p.s. corrigido um erro de digitação, em seus argumentos você digitou categoy)