Solargarden Inviato 23 Gennaio 2011 Segnala Condividi Inviato 23 Gennaio 2011 Ciao ragazzi! Ho bisogno del vostro aiuto! Sto progettando con i miei colleghi la base di dati di un social network dedicato ai libri (in sostanza uno come aNobii) e siamo incappati in un piccolo problema: l'implementazione del trigger. Abbiamo queste tabelle: Opera (ID_Opera, TitoloOpera, AnnoPrimaPubblicazione, LinguaOriginale, Serie, NumPersonaggi) Compaiono (ID_Personaggio, ID_Opera) Personaggi (ID_Personaggio, Nome, Reale, Ruolo) Vorremmo, per mezzo di un trigger, aggiornare automaticamente l'attributo NumPersonaggi di Opera non appena viene modificata la tabella Compaiono. Abbiamo provato questa soluzione create Trigger OperaNumPersonaggi after insert on Opera for each row update Opera set NumPersonaggi = (Select Count(*) from Compaiono c where c.ID_Opera = ID_Opera) ; ma al MySQL Workbench CE for Mac OS X version 5.2.27 non piace: Error Code: 1442Can't update table 'opera' in stored function/trigger because it is already used by statement which invoked this stored function/trigger. Potete mica aiutarci? Link al commento Condividi su altri siti Altre opzioni di condivisione...
fra.makaveli Inviato 23 Gennaio 2011 Segnala Condividi Inviato 23 Gennaio 2011 Non sono in grado di risponderti non avendo mai provato ad usare i trigger, ma... se invece quel valore lo calcolassi ogni volta che ti serve (nelle tue query)? Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 23 Gennaio 2011 Autore Segnala Condividi Inviato 23 Gennaio 2011 Non sono in grado di risponderti non avendo mai provato ad usare i trigger, ma... se invece quel valore lo calcolassi ogni volta che ti serve (nelle tue query)? No non è questione di avere il valore, ma far sì che venga aggiornato ogni volta tramite un trigger. Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Con mysql non è possibile modificare la tabella interessata dall’evento che innesca il trigger. Infatti il tuo trigger è coretto ma siccome lavori su opera ti restituisce quell'errore. Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 24 Gennaio 2011 Autore Segnala Condividi Inviato 24 Gennaio 2011 Con mysql non è possibile modificare la tabella interessata dall’evento che innesca il trigger. Infatti il tuo trigger è coretto ma siccome lavori su opera ti restituisce quell'errore. Ti ringrazio! In alternativa cosa si potrebbe fare? P.S.: questo trigger potrebbe funzionare su altri ambienti diversi da MySQL? Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Ti ringrazio! In alternativa cosa si potrebbe fare? P.S.: questo trigger potrebbe funzionare su altri ambienti diversi da MySQL? Inizia cambiando la clausola after con before, fammi sapere che ti dice. Per il ps posso dirti che io ho lavorato con Oracle e da quanto vedo il trigger non dovrebbe presentare incompatibilità su quell'ambiente, su altri tipi di dbms non saprei dirti purtroppo. Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 24 Gennaio 2011 Autore Segnala Condividi Inviato 24 Gennaio 2011 Inizia cambiando la clausola after con before, fammi sapere che ti dice... Non cambia niente Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Non cambia niente Invece di update cerca di utilizzare SET, in quel modo con before dovresti riuscire ad aggirare il problema. Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 24 Gennaio 2011 Autore Segnala Condividi Inviato 24 Gennaio 2011 Credo di aver commesso qualche errore perché con questo codice create Trigger OperaNumPersonaggibefore insert on Opera for each row set NumPersonaggi = (Select Count(*) from Compaiono c where c.ID_Opera = ID_Opera ); mi restituisce questo errore Error Code: 1193Unknown system variable 'NumPersonaggi' Ho cercato in rete, ma ho paura che questa soluzione (il trigger intendo ) abbia problemi di portabilità . Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Scusami ma hai letto la documentazione di SET? Sul link che ti ho dato viene spiegato come utilizzarlo.. SET @[i]var_name[/i] = [i]expr[/i] Ti restituisce quell'errore perché non dichiari nessuna variabile NumPersonaggi con DECLARE. Devi riuscire a giocare con i valori dell'insert grazie ai comandi NEW/OLD. Per la compatibilità intendi su dbms oracle? Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 24 Gennaio 2011 Autore Segnala Condividi Inviato 24 Gennaio 2011 Sisi Grazie mille! Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Sisi Grazie mille! A cosa ti riferisci? Risolto? Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Solargarden Inviato 24 Gennaio 2011 Autore Segnala Condividi Inviato 24 Gennaio 2011 A cosa ti riferisci? Risolto? Oracle Risolto ancora no perché non ci ho potuto mettere mano. Ti farò sapere nei prossimi giorni. Link al commento Condividi su altri siti Altre opzioni di condivisione...
DaD Inviato 24 Gennaio 2011 Segnala Condividi Inviato 24 Gennaio 2011 Ok. Buon lavoro! Skype: dadspecial | My Blog: JollyChar Link al commento Condividi su altri siti Altre opzioni di condivisione...
Messaggi raccomandati
Archiviato
Questa discussione è archiviata e chiusa a future risposte.