Mysql
 sql >> Database >  >> RDS >> Mysql

START TRANSACTION all'interno del contesto BEGIN ... END o esterno e LOOP sintassi

  1. No:le istruzioni composte possono essere utilizzate solo all'interno del corpo dei programmi memorizzati.

  2. START TRANSACTION; e COMMIT; sono affermazioni separate. Se si desidera che il corpo di un programma memorizzato contenga più istruzioni, sarà necessario racchiudere tali istruzioni in una sorta di blocco di istruzioni composte come BEGIN ... END (che è simile a racchiudere un blocco di istruzioni tra parentesi graffe { ... } all'interno di un linguaggio simile al C).

    Detto questo, potresti avere un programma memorizzato che contiene solo l'istruzione singola START TRANSACTION; o COMMIT; —un programma del genere non richiederebbe alcun blocco di istruzioni composte e avvierebbe semplicemente una nuova transazione / commetterebbe rispettivamente la corrente.

    Al di fuori di un programma memorizzato, dove i blocchi di istruzioni composte non sono consentiti, puoi emettere START TRANSACTION; e COMMIT; dichiarazioni come e quando richiesto.

  3. LOOP è anche un blocco di istruzioni composto, che è valido solo all'interno di una stored procedure. Non è necessario per racchiudere un LOOP blocco all'interno di un BEGIN ... END blocco, sebbene sia normale (perché altrimenti è difficile eseguire qualsiasi inizializzazione del ciclo richiesta).

Nel tuo caso, in cui apparentemente desideri inserire dati in una tabella da un costrutto di loop, dovrai:

  • definisci un programma memorizzato in cui usi LOOP;

  • iterare un ciclo in un programma esterno che esegue query di database su ogni iterazione; o

  • ridefinisci la tua logica in termini di insiemi su cui SQL può operare direttamente.