Telefonino.net network
 
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. NEI PREFERITI .:: | RSS Forum | RSS News | NEWS web | NEWS software |
| PUBBLICITA' | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | CERCA nel FORUM » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 20-10-2008, 11.32.23   #1
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
[MYSQL] perkè questo codice non funziona?

Scritto in questo modo, il seguente trigger non funziona, mi da un generico errore di sintassi senza specificare cosa.

DELIMITER //
create trigger videoteca.aggiusta_quantita
after delete on noleggio
for each row
BEGIN
UPDATE dvd
IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato
END IF;
END;//
DELIMITER;

Qualche idea?

L'errore che MySQL Query Browser mi restituisce è :

Quota:
Nro Errore: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato
' at line 6

Ultima modifica di Poseidon : 20-10-2008 alle ore 11.41.20
Poseidon non è collegato   Rispondi citando
Vecchio 20-10-2008, 13.33.27   #2
Alhazred
Made in Japan
Top Poster
 
L'avatar di Alhazred
 
Registrato: 04-07-2001
Messaggi: 4.461
Alhazred promette bene
Manca il ; alla fine di questa riga
IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato
Alhazred non è collegato   Rispondi citando
Vecchio 20-10-2008, 17.19.55   #3
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
umm corretto, ma MySQL Query Browser continua a darmi errore in linea 6.

DELIMITER //
create trigger videoteca.aggiusta_quantita
after delete on noleggio
for each row
BEGIN
UPDATE dvd
IF quantita < 5 THEN SET quantita=quantita+1 where id_dvd = old.dvd_noleggiato;
END IF;
END;//
DELIMITER;
Poseidon non è collegato   Rispondi citando
Vecchio 23-10-2008, 12.44.11   #4
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
Cambiando trigger, ma rimanendo in tema:


DELIMITER $$
create trigger consentiNoleggioSe
before insert on noleggio
for each row
BEGIN

IF dvd.quantita in (select quantita from dvd join noleggio
on dvd.id_dvd = new.dvd_noleggiato
where quantita between 1 and 5)
THEN insert into noleggio(id_nol, id_cliente, dvd_noleggiato, inizio, DataRestEff, prezzo)
values(new.id_nol, new.id_cliente, new.dvd_noleggiato, new.inizio, new.DataRestEff, new.prezzo);
END IF;
END; $$
DELIMITER;

L'idea è di consentire un noleggio solo se la quantità copie di dvd disponibili relativi a 1 particolare dvd, caratterizzato da un suo id, è maggiore di 0 e minore di 5.

Il codice mi viene accettato da MySQL Query Browser, ma se tento poi di inserire un noleggio nella tabellanoleggi mi dice:

Unknown column 'quantita' in IN/ALL/ANY subquery ERRORE N° 1054

E non capisco perkè, dato che "quantita" è effettivamente un attributo della tabella DVD.
Poseidon non è collegato   Rispondi citando
Vecchio 24-10-2008, 09.16.50   #5
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
nessuno che mi sappia aiutare?
Poseidon non è collegato   Rispondi citando
Vecchio 24-10-2008, 11.30.28   #6
Poseidon
Gold Member
 
Registrato: 21-09-2002
Messaggi: 2.281
Poseidon promette bene
ho provato anche così, ma non funziona. Vi prego ne sto uscendo pazzo ...

DELIMITER //
create trigger consentiNol
before insert on noleggio
for each row
BEGIN
if dvd.quantita in (select distinct quantita
from dvd join noleggio
on dvd.id_dvd = dvd_noleggiato
where quantita between 1 and 5)
then insert into noleggio(id_nol, tipo, id_cliente, dvd_noleggiato, inizio, DataRestEff, prezzo)
values(new.id_nol, new.tipo, new.id_cliente, new.dvd_noleggiato, new.inizio, new.DataRestEff, new.prezzo);
end if;
END//
DELIMITER;

---> errore: Unknown table 'dvd' in IN/ALL/ANY subquery


>.< MySQL non riconosce le clausole check implementate nelle tabelle, ma nemmeno coi trigger si può rendere tale vincolo? come diamine faccio? sn disperato: "un noleggio non può essere inserito se la quantità di copie dvd diponibili è = 0"

CREATE TABLE `videoteca`.`dvd` (
`id_dvd` int(10) NOT NULL auto_increment,
`data_fabb` date NOT NULL,
`id_film` int(10) NOT NULL,
`quantita` tinyint(1) default '5',
PRIMARY KEY (`id_dvd`),
UNIQUE KEY `FK_dvd_1` USING BTREE (`id_film`),
CONSTRAINT `FK_dvd_1` FOREIGN KEY (`id_film`) REFERENCES `film` (`id_film`)
CONSTRAINT `chk_quantita` CHECK (quantita between 0 and 5); **** viene ignorata da MySQL ****
);

CREATE TABLE `videoteca`.`film` (
`id_film` int(10) NOT NULL auto_increment,
`titolo` varchar(50) default NULL,
`anno` year(4) default NULL,
`regista` int(11) default NULL,
PRIMARY KEY (`id_film`),
KEY `FK_film_1` (`regista`),
CONSTRAINT `FK_film_1` FOREIGN KEY (`regista`) REFERENCES `attoreregista` (`id_AttReg`)
);

Ultima modifica di Poseidon : 24-10-2008 alle ore 11.39.16
Poseidon non è collegato   Rispondi citando
Vecchio 03-11-2008, 03.44.12   #7
xaras2
Newbie
 
Registrato: 27-07-2008
Messaggi: 19
xaras2 promette bene
Prova

IF quantita < '5' THEN SET quantita = quantita + 1 where id_dvd = old.dvd_noleggiato


Credi posso andare x cio che devi fare tu?

IF ((quantita < 5) and (id_dvd = old.dvd_noleggiato)) THEN SET quantita=quantita+1

Magari funzia

Ultima modifica di xaras2 : 03-11-2008 alle ore 03.51.17
xaras2 non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

Discussioni simili
Discussione Autore discussione Forum Risposte Ultimo messaggio
Teoria dei giochi: aiutatemi a risolvere questo problema! Pistol-pete Chiacchiere in libertà 10 30-06-2007 00.20.39
[javascript] memorizzare selezioni di un campo select di un modulo bietolino Programmazione 4 14-05-2007 12.05.02
Genuine intel (R) CPU T2060 @ 1.60GHz? smithcome Hardware e Overclock 68 08-03-2007 19.33.02
Funziona troppo bene!!! aspide Software applicativo 7 31-08-2004 13.06.39
Parenti... Skorpios Chiacchiere in libertà 77 09-03-2004 16.02.22

Orario GMT +2. Ora sono le: 16.35.56.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.