Espero que alguien pueda ayudar. He creado mi primera procdure almacenada (nada sofisticado), sin embargo, estoy teniendo un problema.MYSQL - Procedimiento almacenado que utiliza cadena separada por comas como entrada variable
Quiero darle una entrada de cadena tales como 1,2,3,4,5 entonces se hace un simple SELECT * FROM [TABLE] WHERE EAN IN (VAR);
lo tanto, el procedimiento almacenado se parece a esto:
-- --------------------------------------------------------------------------------
-- Routine DDL
-- Note: comments before and after the routine body will not be stored by the server
-- --------------------------------------------------------------------------------
DELIMITER $$
CREATE PROCEDURE `moments`.`new_procedure`(IN var1 VARCHAR(255))
BEGIN
SELECT * FROM moments.PRODUCT WHERE EAN IN (var1);
END
Im am tratar de ejecutarlo como tales:
Obras
call moments.new_procedure('5045318357397')
no funciona
call moments.new_procedure('5045318357397,5045318357427');
Esto ejecuta pero no DOESNT traer de vuelta a ningún resultado. ¿Se clasificar a la segunda afirmación como una cadena por lo que su hacer esto:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
y no esto:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
¿Cómo tengo que dar formato a la entrada en la consulta ejecutar para conseguir que se tome una cadena separada por comas como una entrada?
Esto funciona perfectamente dentro del proceso almacenado, gracias. Así es como lo llamaré desde la aplicación Cast Iron, que es una ventaja añadida. – MMKD
esto funciona, pero no es muy eficiente, ya que necesita buscar todas las filas de la tabla y luego comparar cada fila con su conjunto, que a su vez también tiene que recorrer la lista separada por comas para comprobar si coincide ... Si su # de columnas es bajo, entonces está bien; de lo contrario, debería encontrar una forma de bache – Populus
@El comentario de Populus necesita ser arrancado más - FIND_IN_SET no usa ningún índice de tabla, por lo que es potencialmente un gran problema de rendimiento si se usa de esta manera –