Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
Mysql e Stored Function
venerdì 26 ottobre 2007 - 10.17
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
pino8314
Profilo
| Newbie
29
messaggi | Data Invio:
ven 26 ott 2007 - 10:17
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
8.814
messaggi | Data Invio:
ven 26 ott 2007 - 10:36
>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
29
messaggi | Data Invio:
ven 26 ott 2007 - 10:47
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
8.814
messaggi | Data Invio:
ven 26 ott 2007 - 11:03
>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
29
messaggi | Data Invio:
ven 26 ott 2007 - 11:14
infatti sulle stored procedure funziona per bene ma se volessi usarlo con stored function??? mi da sempre lo stesso errore
pino8314
Profilo
| Newbie
29
messaggi | Data Invio:
ven 26 ott 2007 - 11:33
scusa non avevo capito dall'avviso, a quanto pare si può fare solo con le procedure
pino8314
Profilo
| Newbie
29
messaggi | Data Invio:
mer 31 ott 2007 - 10:20
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
29
messaggi | Data Invio:
mer 31 ott 2007 - 17:06
vi prego .............. non c'è nessuno che possa aiutarmi?
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
mer 31 ott 2007 - 20:23
>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
29
messaggi | Data Invio:
gio 1 nov 2007 - 15:02
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
8.814
messaggi | Data Invio:
gio 1 nov 2007 - 15:07
>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
29
messaggi | Data Invio:
gio 1 nov 2007 - 15:32
ok, scusatemi.......
alx_81
Profilo
| Guru
8.814
messaggi | Data Invio:
gio 1 nov 2007 - 21:02
>ok, scusatemi.......
http://www.dotnethell.it/forum/messages.aspx?ThreadID=19137
Alx81 =)
http://blogs.dotnethell.it/suxstellino
Torna su
Stanze Forum
Elenco Threads
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 !