MySQL-documenten over Flow Control-verklaringen zeg:
Documenten op Opgeslagen programma's en weergaven zeg:
Samengestelde-statementsyntaxis
Het lijkt er dus op dat u alleen een expliciete lus kunt uitvoeren binnen een opgeslagen procedure, functie of trigger.
Afhankelijk van wat u in uw SQL-instructie doet, kan het acceptabel zijn om een tabel (of weergave) van getallen te gebruiken (Een "Getallentabel" maken in mysql , MYSQL:volgnummertabel ).
Als uw zoekopdracht een SELECT
. is en het is OK om het resultaat van uw SELECT
. te retourneren 10 keer als één lange resultatenset (in tegenstelling tot 10 afzonderlijke resultatensets) kun je zoiets als dit doen:
SELECT MainQuery.*
FROM
(
SELECT 1 AS Number
UNION ALL SELECT 2
UNION ALL SELECT 3
UNION ALL SELECT 4
UNION ALL SELECT 5
UNION ALL SELECT 6
UNION ALL SELECT 7
UNION ALL SELECT 8
UNION ALL SELECT 9
UNION ALL SELECT 10
) AS Numbers
CROSS JOIN
(
SELECT 'some data' AS Result
) AS MainQuery
Voorbeeld voor INSERT
Ik raad aan om een permanente tabel met getallen in uw database te hebben. Het is in veel gevallen handig. Zie de links hierboven hoe u het kunt genereren.
Dus, als je een tabel Numbers
. hebt met int
kolom Number
met waarden van 1 tot, laten we zeggen, 100K (zoals ik doe), en primaire sleutel in deze kolom, dan in plaats van deze lus:
DECLARE count INT DEFAULT 0;
WHILE count < 10 DO
INSERT INTO table_name(col1,col2,col3)
VALUES("val1","val2",count);
SET count = count + 1;
END WHILE;
je kunt schrijven:
INSERT INTO table_name(col1,col2,col3)
SELECT ("val1", "val2", Numbers.Number-1)
FROM Numbers
WHERE Numbers.Number <= 10;
Het zou ook bijna 10 keer sneller werken.