|
|
|
|
 |
|  |
 |
fra85 |
| Aiuto Esercizio Sui Triggere Con Mysql |
11-06-2011 14:05 |
|
 |
fra85 |
.primate.
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Aiuto Esercizio Sui Triggere Con Mysql
salve ragazzi,sto postando il mio esercizio così magari mi potete aiutare meglio,spero .
Allora devo implementare un vincolo per il mio progetto.Avendo la tabella iscritto:
CREATE TABLE iscritto(
codice_fiscale VARCHAR(20) NOT NULL PRIMARY KEY,
data_di_nascita DATE ,
nome VARCHAR(20) NOT NULL,
cognome VARCHAR(20) NOT NULL,
indirizzo VARCHAR(30) NOT NULL,
costo_abbonamento DECIMAL(10,2),
numero_socio INT NOT NULL,
data_fine_abbonamento DATE,
data_inizio_abbonamento DATE
);
Dovrei implementare il vincolo che un iscritto deve avere dai 18 ai 90 anni.Uso i trigger dato che mysql ignora i chek.
Io ho provato a creare questo(anche se non ho capito bene la funzione del delimiter):
DELIMITER //
create trigger aggiorna_iscritti
after insert on iscritto
for each row
begin
declare eta int;
SET eta= YEAR(CURDATE()) - YEAR(NEW.data_di_nascita);
if eta < 18 then
if eta > 90 then
delete from iscritto where data_di_nascita= NEW.data_di_nascita;
end if;
end if;
end ;//
Mi dice che è corretto,però poi provo a inserire qualche elemento nella tabella e mi dice una cosa del genere:
mysql>INSERT ... ecc....;
-->
come se mi richiede qualcos'altro e non capisco,perchè?
Forse appunto perchè non ho capito come funziona il delimiter...
Qualcuno può aiutarmi?????
Grazie mille.
|
|
11-06-2011 14:05 |
|
|
|  |
 |
number15 |
| Intanto io gestirei il tutto da input, cioè dal t ... |
11-06-2011 14:35 |
|
 |
number15 |
.grande:maestro.
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline
Edit | Report | IP: Logged |
Intanto io gestirei il tutto da input, cioè dal tuo programma fai che non puoi mettere età < 18 o > 90.
Per quanto riguarda il trigger, di base la struttura è questa:
code: DELIMITER $$
CREATE TRIGGER ... AFTER INSERT ON ...
FOR EACH ROW BEGIN
IF ....
END IF;
END;
$$
DELIMITER ;
Il tuo trigger sicuramente in sto punto è sbagliato:
if eta < 18 then
if eta > 90 then
son in contrasto tra di loro. Se vuoi devi ripetere la delete e chiudere l'if. ALtrimenti (più giusto) devi fare qualcosa con l'OR (eta < 18 or eta > 90).
Inoltre eviterei anche tutta la parte della dichiarazione, andando direttamente se l'anno attuale - l'anno di nascita < 18 o .... maggiore di 90.
Quando cancelli utilizza cmq la chiave (where cf = nef.cf)
Tra l'altro ti consiglio di aggiungere un id_iscritto di tipo int auto_increment da usare come PK e metti codice_fiscale come UNIQUE.
Comunque ripeto, a meno che sia espressamente richiesto, un trigger per il controllo dell'età mi pare folle.
__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com
Last edited by number15 on 11-06-2011 at 14:51
|
|
11-06-2011 14:35 |
|
|
|  |
 |
fra85 |
| Si mi è stato richiesto di implementare il vinco ... |
11-06-2011 14:43 |
|
 |
fra85 |
.primate.
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Si mi è stato richiesto di implementare il vincolo.OK provo a sistemarlo e vediamo
|
|
11-06-2011 14:43 |
|
|
|  |
 |
number15 |
| Chiedi al prof comunque, per me non è giusto usar ... |
11-06-2011 15:04 |
|
 |
number15 |
.grande:maestro.
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline
Edit | Report | IP: Logged |
Chiedi al prof comunque, per me non è giusto usare un trigger.
TI chiede vincolo a livello sql?
Perché è puoi fare vincolo applicativo e funziona uguale (anzi meglio)
__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com
|
|
11-06-2011 15:04 |
|
|
|  |
 |
fra85 |
| Ho provato a rifarlo.Ho cancellato il vecchio trig ... |
11-06-2011 15:09 |
|
 |
fra85 |
.primate.
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Ho provato a rifarlo.Ho cancellato il vecchio trigger e ho inserito quello nuovo:
DELIMITER //
create trigger aggiorna_iscritti
after insert on iscritto
for each row begin
declare eta int;
SET eta= YEAR(CURDATE()) - YEAR(NEW.data_di_nascita);
if (eta < 18 and eta > 90) then
delete from iscritto where codice_fiscale= NEW.codice_fiscale;
end if;
end ;
//
non ho neanche il tempo di scrivere DELIMITER; infatti dopo il codice mi compare:
query ok, 0 rows affected (0.17 sec)
poi provo a farlo ora delimiter:
mysql> DELIMITER;
->
e siamo dinuovo così,come se mi richiedesse qualcosa ancora.Sono le prime volte che faccio i trigger quindi ancora so quasi niente 
|
|
11-06-2011 15:09 |
|
|
|  |
 |
number15 |
| if (eta < 18 and eta > 90) then
... |
11-06-2011 15:13 |
|
 |
number15 |
.grande:maestro.
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline
Edit | Report | IP: Logged |
if (eta < 18 and eta > 90) then
questo è sbalgiato, metti l'or.
Ma comunque parti da un trigger base.
After insert on iscritto setti un campo a scelta tua (es. nome = pippo).
E vedi se funziona. Poi vai a cambiare la struttura per quello che devi fare, ma almeno vedi come funziona.
__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com
|
|
11-06-2011 15:13 |
|
|
|  |
 |
fra85 |
| Siccome devo fare un'integrazione,mi richiede di i ... |
11-06-2011 15:15 |
|
 |
fra85 |
.primate.
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline
Edit | Report | IP: Logged |
Siccome devo fare un'integrazione,mi richiede di implementare tre vincoli tramite check,asserzioni o trigger(c'è scritto).boh
|
|
11-06-2011 15:15 |
|
|
|  |
 |
number15 |
| Asserzione non so cosa intenda :D.
... |
11-06-2011 15:19 |
|
 |
number15 |
.grande:maestro.
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline
Edit | Report | IP: Logged |
Asserzione non so cosa intenda .
Le check puoi metterle, poi mysql se ne frega ma tu il vincolo l'hai messo.
In postgres mi pare funzionino.
Se hai possibilità di sentire il prof, chiedi se puoi implementare il vincolo a livello applicativo.
Ovviamente poi avrai altri trigger da implementare, quindi la discussione ti è utile uguale, ma lascerei perdere questo.
__________________
Portale segnalazioni marchi-negozi di abbigliamento
http://www.ovojo.com
|
|
11-06-2011 15:19 |
|
|
|  |
 |
| All times are GMT. The time now is 21:58. |
|
|
 |
|
 |
|
|
|  |
Forum Rules:
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts
|
HTML code is OFF
vB code is ON
Smilies are ON
[IMG] code is ON
|
|
|
|
|
|