Dsy Network www | forum | my | didattica | howto | wiki | el goog | stats | blog | dona | rappresentanti
Homepage
 Register   Calendar   Members  Faq   Search  Logout 
.dsy:it. : Powered by vBulletin version 2.3.1 .dsy:it. > Didattica > Corsi A - F > Basi di dati ~ informatica triennale > Aiuto Esercizio Sui Triggere Con Mysql
  Last Thread   Next Thread
Author
Thread    Expand all | Contract all    Post New Thread    Post A Reply
Collapse
fra85
.primate.

User info:
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged
Smile 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
Click Here to See the Profile for fra85 Click here to Send fra85 a Private Message Find more posts by fra85 Add fra85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
number15
.grande:maestro.

User info:
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for number15 Click here to Send number15 a Private Message Find more posts by number15 Add number15 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fra85
.primate.

User info:
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Si mi è stato richiesto di implementare il vincolo.OK provo a sistemarlo e vediamo

11-06-2011 14:43
Click Here to See the Profile for fra85 Click here to Send fra85 a Private Message Find more posts by fra85 Add fra85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
number15
.grande:maestro.

User info:
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for number15 Click here to Send number15 a Private Message Find more posts by number15 Add number15 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fra85
.primate.

User info:
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for fra85 Click here to Send fra85 a Private Message Find more posts by fra85 Add fra85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
number15
.grande:maestro.

User info:
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for number15 Click here to Send number15 a Private Message Find more posts by number15 Add number15 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fra85
.primate.

User info:
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline

Post actions:

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
Click Here to See the Profile for fra85 Click here to Send fra85 a Private Message Find more posts by fra85 Add fra85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
number15
.grande:maestro.

User info:
Registered: Nov 2005
Posts: 652 (0.09 al dì)
Location:
Corso:
Anno:
Time Online: 121 Days, 13:57:11 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

Asserzione non so cosa intenda :D.

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
Click Here to See the Profile for number15 Click here to Send number15 a Private Message Find more posts by number15 Add number15 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
Collapse
fra85
.primate.

User info:
Registered: Mar 2011
Posts: 77 (0.01 al dì)
Location:
Corso: informatica
Anno: terzo anno
Time Online: 10:51:29 [...]
Status: Offline

Post actions:

Edit | Report | IP: Logged

il primo l'ho implementato con il check ed è corretto,solo che mysql lo ignora :):( peggio per lui :-D:D

11-06-2011 15:41
Click Here to See the Profile for fra85 Click here to Send fra85 a Private Message Find more posts by fra85 Add fra85 to your buddy list Printer Friendly version Email this Article to a friend Reply w/Quote
All times are GMT. The time now is 21:58.    Post New Thread    Post A Reply
  Last Thread   Next Thread
Show Printable Version | Email this Page | Subscribe to this Thread | Add to Bookmarks

Forum Jump:
Rate This Thread:

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
 

Powered by: vBulletin v2.3.1 - Copyright ©2000 - 2002, Jelsoft Enterprises Limited
Mantained by dsy crew (email) | Collabora con noi | Segnalaci un bug | Archive | Regolamento | Licenze | Thanks | Syndacate
Pagina generata in 0.088 seconds (61.65% PHP - 38.35% MySQL) con 26 query.