2013-06-06 9 views
7

Ovunque sembri, sembra che le stored procedure MySQL possano eseguire transazioni. Eppure, quando dichiaro la mia funzione memorizzataCodice errore: 1422. Il commit esplicito o implicito non è consentito nella funzione o nel trigger memorizzato

create function test(a int) 
returns int 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
    return 0 ; 
END // 

ottengo

Codice errore: 1422. esplicita o implicita commit non è consentito in funzione memorizzata o un trigger.

risposta

10

transazioni In realtà non sono ammessi all'interno memorizzati funzioni. Sono ammesse transazioni all'interno delle procedure memorizzate .

create procedure test(a int) 
MODIFIES SQL DATA 
BEGIN 
    START TRANSACTION ; 
    update t set col='some value' where id=a ; 
    COMMIT ; 
END // 

Per restituire i valori dall'SP, utilizzare i parametri di output o utilizzare il set di risultati dell'ultima istruzione di selezione nell'SP.

+6

Vale anche la pena notare che se si richiama la procedura da un trigger, verrà comunque ricompensato con un errore "_Explicit o commit implicito in stored function o trigger_". Frustrante. – aroth

+0

hey, questo è un po 'vecchio, ma mi sto imbattendo in questo problema adesso. C'è un modo per aggirarlo? – user2223059

Problemi correlati