Im sperando che qualcuno possa essere d'aiuto. Ho creato il mio primo procdure memorizzato (niente di speciale), tuttavia ho incontrato un problema.MYSQL - Stored procedure che utilizza stringa separata da virgola come input variabile
voglio dargli una stringa di input come ad esempio 1,2,3,4,5 allora fa un semplice SELECT * FROM [TABLE] WHERE EAN IN (VAR);
Così il proc memorizzato assomiglia a questo:
-- --------------------------------------------------------------------------------
-- 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 cercando di eseguirlo come tale:
Opere
call moments.new_procedure('5045318357397')
non funziona
call moments.new_procedure('5045318357397,5045318357427');
Esegue ma non doesnt riportare alcun risultato. E 'classificare la seconda istruzione come una stringa per cui il suo fare questo:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
e non questo:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
Come devo formattare l'ingresso nella query eseguire per farlo prendere un stringa separata da virgola come input?
Questo funziona perfettamente all'interno del processo memorizzato, grazie. Questo è anche il modo in cui lo chiamerò dall'applicazione Cast Iron, che è un ulteriore vantaggio. – MMKD
funziona, ma non è molto efficiente in quanto ha bisogno di recuperare tutte le righe dalla tabella quindi confrontare ogni riga con il set, che a sua volta deve anche scorrere l'elenco separato da virgole per verificare se corrisponde ... Se il tuo # di colonne è basso, quindi va bene altrimenti dovresti trovare un modo di battitura – Populus
Il commento di @Populus deve essere sradicato di più - FIND_IN_SET non usa indici di tabelle, quindi è potenzialmente un grosso problema di prestazioni se usato in questo modo –