-
Nej:sammansatta satser kan endast användas inom de lagrade programmen.
-
START TRANSACTION;
ochCOMMIT;
är separata uttalanden. Om du vill att brödtexten i ett lagrat program ska innehålla flera satser, måste det omsluta dessa satser i något slags sammansatt satsblock somBEGIN ... END
(vilket liknar att omsluta ett block av satser inom klammerparenteser{ ... }
inom ett C-liknande språk).Som sagt, du kunde har ett lagrat program som endast innehåller enkelsatsen
START TRANSACTION;
ellerCOMMIT;
—Ett sådant program skulle inte kräva något sammansatt satsblock och skulle bara påbörja en ny / commit den aktuella transaktionen respektive.Utanför ett lagrat program, där sammansatta programsatsblock inte är tillåtna, kan du utfärda
START TRANSACTION;
ochCOMMIT;
uttalanden efter behov. -
LOOP
är också ett sammansatt satsblock, som endast är giltigt inom en lagrad procedur. Det är inte nödvändigt för att inkludera enLOOP
blockera inom enBEGIN ... END
block, även om det är vanligt (eftersom det annars är svårt att utföra någon nödvändig loopinitiering).
I ditt fall, där du tydligen vill infoga data i en tabell från en looping-konstruktion, måste du antingen:
-
definiera ett lagrat program där du använder
LOOP
; -
iterera en loop i ett externt program som exekverar databasfrågor vid varje iteration; eller
-
omdefiniera din logik i termer av uppsättningar som SQL direkt kan arbeta på.