-
Nej:sammensatte sætninger kan kun bruges i kroppen af lagrede programmer.
-
START TRANSACTION;
ogCOMMIT;
er separate udsagn. Hvis du ønsker, at brødteksten af et lagret program skal indeholde flere sætninger, skal det omslutte disse sætninger i en slags sammensat sætningsblok såsomBEGIN ... END
(hvilket svarer til at omslutte en blok af udsagn i klammer{ ... }
inden for et C-lignende sprog).Når det er sagt, kunne du har et lagret program, som kun indeholder enkeltsætningen
START TRANSACTION;
ellerCOMMIT;
— et sådant program ville ikke kræve nogen sammensat erklæringsblok og ville blot påbegynde henholdsvis en ny / commit den aktuelle transaktion.Uden for et lagret program, hvor sammensatte sætningsblokke ikke er tilladt, kan du udstede
START TRANSACTION;
ogCOMMIT;
erklæringer efter behov. -
LOOP
er også en sammensat sætningsblok, som kun er gyldig i en lagret procedure. Det er ikke nødvendigt for at omslutte enLOOP
blokere i enBEGIN ... END
blok, selvom det er normalt (da det ellers er vanskeligt at udføre en påkrævet loop-initialisering).
I dit tilfælde, hvor du tilsyneladende ønsker at indsætte data i en tabel fra en looping-konstruktion, skal du enten:
-
definere et lagret program, hvor du bruger
LOOP
; -
iterere en løkke i et eksternt program, der udfører databaseforespørgsler på hver iteration; eller
-
redefiner din logik i form af sæt, som SQL direkte kan fungere efter.