Buongiorno a tutti.
Mi sono appena iscritto perchè ho un problema da risolvere.
Sto lavorando con un database in cui ho 2 tabelle:
"user_" e "userdetails" di seguito descritte
-user_
-userdetailscodice:+-----------------------+---------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +-----------------------+---------------+------+-----+---------+-------+ | userId | bigint(20) | NO | PRI | NULL | | | createDate | datetime | YES | | NULL | | | password_ | varchar(75) | YES | | NULL | | | emailAddress | varchar(75) | YES | MUL | NULL | | | firstName | varchar(75) | YES | | NULL | | | lastName | varchar(75) | YES | | NULL | | | active_ | tinyint(4) | YES | | NULL | | +-----------------------+---------------+------+-----+---------+-------+
Vorrei fare in modo che, all'aggiunta di un nuovo utente nella tabella user_ sia automaticamente aggiunta una nuova riga nella tabella userdetails che abbia lo stesso userId del nuovo utente.codice:+----------+------------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +----------+------------+------+-----+---------+-------+ | userId | bigint(20) | NO | PRI | NULL | | | lat | double | NO | | NULL | | | lon | double | NO | | NULL | | | visibile | tinyint(1) | NO | | NULL | | +----------+------------+------+-----+---------+-------+
Per far ciò avevo realizzato un trigger che al suo interno richiama una stored procedure. Ecco il codice:
Il codice non genera errori, ma all'aggiunta di un nuovo utente nella tabella user_ nessuna riga viene generata in userdetails.codice:delimiter // create procedure getlastpk(OUT id BIGINT) begin declare lastpk bigint; declare cercapk cursor for select userId from user_ where createDate=(select max(createDate) from user_); open cercapk; fetch cercapk into lastpk; close cercapk; set id=lastpk; end; // delimiter ; delimiter // create trigger tr_dettagli_user AFTER INSERT ON user_ FOR EACH ROW call getlastpk(@pk); INSERT INTO userdetails VALUES((select @pk),0.0,0.0,false,false); // delimiter ;
Dove ho sbagliato? Come potrei fare?
Grazie per le eventuali risposte.

Rispondi quotando