Mysql e Stored Function

venerdì 26 ottobre 2007 - 10.17

pino8314 Profilo | Newbie

ciao a tutti,

ho un piccolo problema con mysql....vengo subito al dunque

sto creando una stored procedures che esegue due insert in due tabelle diverse.....fin qui tutto ok

se per caso la seconda insert non dovesse andare a buon fine, la prima viene eseguita ugualmente, e non voglio che questo accada. Siccome le due insert dovrebbero essere dipendenti l'una dall'altara, vorrei che se per qualche errore la seconda insert non venisse eseguita, neanche la prima deve essere eseguita.

io uso anche postgres come db e tutto questo funziona alla grande.

faccio un esempio su come faccio in postgres

creao una tabella di nome prova a cui attribuisco un campo prova VARCHAR NOT NULL, successivamente creo un'altra tabella a cui attribuisco un campo prova_2 VARCHAR e sempre NOT NULL

dopo creo la mia funzione

BEGIN

insert into prova(prova) VALUES ('prova');
insert into prova_2(prova_2) VALUES (null);

RETURN 0;

END

come potete vedere dalla seconda insert, non passo nessun valore e questo mi genererà un errore perchè quel campo non può contenere valori nulli e la insert non viene effettuata, di conseguenza neanche la prima viene effettuata perchè finchè la funzione non ottiene il return 0, le insert non le esegue.

Invece su Mysql la stessa identica cosa non va....cioè mi generà l'errore della seconda insert ma la prima la esegue lo stesso...

vi prego aiutatemi è importante.....non so dove sbattere più la testa.

alx_81 Profilo | Guru

>ciao a tutti,
Ciao!
>
>ho un piccolo problema con mysql....vengo subito al dunque
>sto creando una stored procedures che esegue due insert in due
>tabelle diverse.....fin qui tutto ok
>se per caso la seconda insert non dovesse andare a buon fine,
>la prima viene eseguita ugualmente, e non voglio che questo accada.
>Siccome le due insert dovrebbero essere dipendenti l'una dall'altara,
>vorrei che se per qualche errore la seconda insert non venisse
>eseguita, neanche la prima deve essere eseguita.
>io uso anche postgres come db e tutto questo funziona alla grande.
>
>vi prego aiutatemi è importante.....non so dove sbattere più
>la testa.
Devi utilizzare una transazione, in modo da rendere unico il tuo insieme di istruzioni.
Se una delle due fallisce, tutto quello all'interno della transazione si annulla.
Se non ricordo male in mysql è una cosa così:

start transaction;
insert into prova(prova) VALUES ('prova');
insert into prova_2(prova_2) VALUES (null);
commit;

In questo modo le tue insert sono all'interno di una unità atomica.
Prova e facci sapere


Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

ciao,

per prima cosa grazie della risposta......ho provato quello che hai detto ma mysql mi ritorna un errore

Explicit or Implicitcommit not allowed in stored function or trigged

alx_81 Profilo | Guru

>ciao,
>
>per prima cosa grazie della risposta......ho provato quello che
>hai detto ma mysql mi ritorna un errore
>
>Explicit or Implicitcommit not allowed in stored function or
>trigged
prova a leggere qui:
http://www.db4free.net/phpbb2/viewtopic.php?t=74&highlight=transaction+inside+stored+procedure

Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

infatti sulle stored procedure funziona per bene ma se volessi usarlo con stored function??? mi da sempre lo stesso errore

pino8314 Profilo | Newbie

scusa non avevo capito dall'avviso, a quanto pare si può fare solo con le procedure

pino8314 Profilo | Newbie

salve gente,

invece di utilizzare un altro post, riutilizzo questo per fare una domanda dello stesso argomento....

ho due domande da porvi

1) fino ad ora ho cercato di risolvere il problema di questo post con le stored procedures...adesso ho l'esigenza di risolvere ilproblema anche eseguendo uno start transaction da php....è possibile

e quindi

"se per caso la seconda insert non dovesse andare a buon fine, la prima viene eseguita ugualmente, e non voglio che questo accada. Siccome le due insert dovrebbero essere dipendenti l'una dall'altara, vorrei che se per qualche errore la seconda insert non venisse eseguita, neanche la prima deve essere eseguita."

ma il tutto in php e non con le stored procedures

2) quando uso il tutto nelle stored procedures invece, è possibile dopo una insert passare l'id autoincrementate (LAST_INSERT_id()), a php....mi spiego meglio,

io eseguo da php la stored procedures che a sua volta esegue una insert.....come faccio a estrapolarmi in php l'id dell'ultima insert ??


grazie mille

pino8314 Profilo | Newbie

vi prego .............. non c'è nessuno che possa aiutarmi?

alx_81 Profilo | Guru

>vi prego .............. non c'è nessuno che possa aiutarmi?
non conoscendo bene php posso dirti di guardare questo link..
http://www.devarticles.com/c/a/MySQL/Using-Transactions-with-MySQL-4.0-and-PHP/

di più non posso dirti..
facci sapere

Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

Grazie mille è proprio quello che cercavo......

invece se volessi passarmi un valore in php da una stored procedures cosa dovrei fare???

alx_81 Profilo | Guru

>Grazie mille è proprio quello che cercavo......
>
>invece se volessi passarmi un valore in php da una stored procedures
>cosa dovrei fare???
Per cortesia, se ritieni che ti abbia aiutato, accetta la risposta che ha risolto così chiudiamo il thread. Poi, posta un nuovo messaggio per quest'ultima domanda. Perchè ormai ti conviene per ottenere risposte diverse dalla mia . E io non conosco php . Grazie in anticipo per la tua comprensione.

Alx81 =)

http://blogs.dotnethell.it/suxstellino

pino8314 Profilo | Newbie

ok, scusatemi.......

alx_81 Profilo | Guru

>ok, scusatemi.......
http://www.dotnethell.it/forum/messages.aspx?ThreadID=19137

Alx81 =)

http://blogs.dotnethell.it/suxstellino
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5