MySQL understøtter ikke variabelt antal parametre. Du kan snyde den som arne_v foreslår, men som du selv bemærker er den begrænset til det antal kunstige parametre du opretter ved start (dvs. hvad sker der, hvis du pludseligt opdager du skal bruge en 4 mulighed?).
Alt efter konteksten, kan du gøre følgende:
Oprette en midlertidig tabel ("TEMPORARY TABLE"), indsætte samtlige dine søgeord i den (Gøres udenfor proceduren).
I proceduren opretter du endnu en midlertidig tabel som du sætter resultaterne i.
Herefter itererer du over dine søgeord, laver din søgning og indsætter resultatet i den midlertidige tabel med resultater.
Når det er slut, læser du resultat-tabellen.
[code]
DROP TEMPORARY TABLE IF EXISTS searchwords;
CREATE TEMPORARY TABLE searchwords ( word VARCHAR(20) );
-- Insert values via your program, script, and this is perhaps the easist place to add % to the words
INSERT INTO searchwords (word) VALUES ('cute'),('kittie');
DELIMITER $$
CREATE PROCEDURE mySearch()
BEGIN
DECLARE word_val VARCHAR(20);
DECLARE cur CURSOR FOR SELECT word FROM searchwords;
-- Declare 'handlers' for exceptions
DECLARE CONTINUE HANDLER FOR NOT FOUND SET no_more_rows = TRUE;
DROP TEMPORARY TABLE IF EXISTS myresults;
CREATE TEMPORARY TABLE myresults
(CASE_TABLE.ID,SYMPTOMS_HEADER, SYMPTOMS,SOLUTION);
OPEN cur;
the_loop: LOOP
FETCH cur INTO word_val;
-- break out of the loop if
-- 1) there were no records, or
-- 2) we've processed them all
IF no_more_rows THEN
CLOSE friends_cur;
LEAVE the_loop;
END IF;
INSERT INTO myresults
SELECT DISTINCT CASE_TABLE.ID,SYMPTOMS_HEADER, SYMPTOMS,SOLUTION FROM CASE_TABLE
WHERE SYMPTOMS LIKE word_val;
END LOOP the_loop;
END $$
DELIMITER ;
SELECT * FROM myresults;
[/code]
Fordelen ved at anvende midlertidige tabeller (TEMPORARY TABLES) er, at de kun eksistere for den aktuelle forbindelse. Dvs. hvis to processer (f.eks. to programmer eller to scripts) hver har en forbindelse til din database, kan de ikke læse hinandens midlertidige tabel, ej heller skrive data til dem.
Men vær påpasselig med dem i f.eks. php, da forbindelsen til databasen brydes, så snart scriptet er gennemført (dvs. siden er indlæst). Her skal der andre tricks til. Men du kan stadig anvende det så længe det hele køres i det samme php-script.
(Lidt af koden kom herfra:
http://www.kbedell.com/2009/03/02/a-simple-example-of-a-mysql-stored-procedure-that-uses-a-cursor/)