Vai al contenuto

Trigger in MySql


Messaggi raccomandati

Ciao ragazzi! Ho bisogno del vostro aiuto! :ghghgh:

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: 1442

Can't update table 'opera' in stored function/trigger because it is already used by statement which invoked this stored function/trigger.

Potete mica aiutarci? :ghghgh:

Link al commento
Condividi su altri siti

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

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

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

Credo di aver commesso qualche errore perché con questo codice

create Trigger OperaNumPersonaggi

before 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: 1193

Unknown 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

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

Archiviato

Questa discussione è archiviata e chiusa a future risposte.

×
×
  • Crea Nuovo...