Mam nadzieję, że komuś uda się pomóc. Stworzyłem mój pierwszy zapisany procdure (nic nadzwyczajnego), jednak jestem uruchomiony problem.MYSQL - procedura przechowywana z wykorzystaniem oddzielonych przecinkami ciągów jako zmiennych wejściowych
chcę dać mu wejście ciąg takie jak 1,2,3,4,5 to robi prosty SELECT * FROM [TABLE] WHERE EAN IN (VAR);
Więc przechowywane proc wygląda następująco:
-- --------------------------------------------------------------------------------
-- 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 starając się go wykonać takie jak:
Works
call moments.new_procedure('5045318357397')
nie działa
call moments.new_procedure('5045318357397,5045318357427');
Ten który zaciągnął ale nie doesnt przynieść żadnych rezultatów. Czy classing drugie oświadczenie jako ciąg, więc jej w ten sposób:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397,5045318357427')
a nie to:
select * from moments.PRODUCT WHERE EAN IN ('5045318357397','5045318357427')
Jak mogę sformatować wejście w zapytaniu wykonać, aby ją wziąć ciąg znaków rozdzielany przecinkami jako dane wejściowe?
Działa to doskonale w przechowywanym procesie, dzięki. Tak też będę nazywał to z aplikacji Żelaznej, która jest dodatkowym bonusem. – MMKD
to działa, ale nie jest zbyt wydajne, ponieważ pobiera wszystkie wiersze ze stołu, a następnie porównuje każdy wiersz z zestawem, który z kolei musi również przejrzeć listę rozdzielaną przecinkami, aby sprawdzić, czy pasuje ... Jeśli Liczba kolumn jest niska, to w porządku, inaczej powinieneś znaleźć sposób na cieście – Populus
Komentarz @Populus musi zostać usunięty bardziej - FIND_IN_SET nie używa żadnych indeksów tabel, więc jest potencjalnie dużym problemem wydajności, jeśli jest używany w ten sposób –