progetto basi:trigger Clicca QUI per vedere il messaggio nel forum |
collo |
:?:?:?
ciao a tuttti, percaso qualcuno ha un'idea su come fare i 3 trigger del progetto di basi di dati??
sono due giorni che cerco di farli andare ma il prog m da sempre errore..
grazie |
CaboM.BNA |
che tipo di errore ti compare? |
collo |
DELIMITER $$
create trigger cinema.agg_sala after insert on prenotazione
for each row begin
declare var integer;
select POSTI_OCC into var
from prenotazione,spettacolo
where (spettacolo.ID_SPET = prenotazione.ID_SPET) and (spettacolo.ID_SPET = new.ID_SPET);
update cinema.spettacolo
set var = var +1;
end $$
ho scritto questo codice e nn m da errori pero quando vado a inserire la prenotazione mi dice che nn trova la variabile var tra le colonne del della mia tabella spettacolo |
poi_1969 |
forse devi scrivere cosi
select var = (select posti_occ ...
Dipende dal sql che utilizzi |
CaboM.BNA |
mmhh.. purtroppo cosi no mi dice molto...
se fosse stato in plpgsql magari ti avrei potuto dare una mano... |
collo |
grazie ora provo e vi faccio sapere.. |
CaboM.BNA |
con questo comando
code:
update cinema.spettacolo
set var = var +1;
tu aggiorni il valore di var all'interno della tabella spettacolo (contenuta nella relazione cinema).
l'errore ti compare se nella tabella spettacolo NON è contenuto un attributo che si chiama "var".
Anche se il codice non lo capisco al 100%, ti faccio anche notare che con l'invocazione dell'UPDATE SENZA la clausola WHERE vengono aggiornati i valori di quell'attributo per TUTTE le tuple della tabella... |
collo |
grande CaboM.BNA funziona
posto per tutti il codice funzionante
DELIMITER $$
create trigger cinema.agg_sala after insert on prenotazione
for each row begin
update cinema.spettacolo
set POSTI_OCC = POSTI_OCC +1 where (spettacolo.ID_SPET = new.ID_SPET);
end $$
DELIMITER; |
RedAngel86 |
Ragazzi problemone... :sad:
Io stò usando mysql, nella versione di easyphp 2.0b1 e se inserisco 2 trigger contemporaneamente mentre provo a creare il secondo mi dà questo errore:
"questa versione di mysql non supporta multiple triggers with the same action time and event for one table"
Che devo fare?:? |
CaboM.BNA |
passa a postgres... ;)
io ne ho piu di uno per tabella...
cmq scherzi a parte, prova a condensare in un solo trigger tutte le azioni che vuoi che vengano compiute...
in alternativa prova ad aggiornare la versione che stai utilizzando.. magari c'e n'è una successiva in cui i trigger "multipli" sono utilizzabili... |
DarkSchneider |
Originally posted by RedAngel86
Ragazzi problemone... :sad:
Io stò usando mysql, nella versione di easyphp 2.0b1 e se inserisco 2 trigger contemporaneamente mentre provo a creare il secondo mi dà questo errore:
"questa versione di mysql non supporta multiple triggers with the same action time and event for one table"
Che devo fare?:?
ha ben ragione ad arrabbiarsi..
che ragione hai di fare due triggers che reagiscano ad uno stesso medesimo evento nello stesso tempo ..( pre - on - post ) sulla stessa tabella?
fanne uno unico, che faccia entrambe le cose che fanno i due triggers |
RedAngel86 |
Già fatto... grazie mille |
donivl16 |
ciao , scusa io uso postgres ma facendo la funzione in modo come ha fatto'collo' nn mi agiorna i posti occupati nella tabella spettacoli. ce qualcuno che mi puo dare una mano.
grazie |
Paola86 |
Ciao, qualcuno ha idea del perchè questo trigger
DELIMITER $$
create trigger aggiorna_occupazione after insert on prenota
for each row
begin
declare posti smallint;
SELECT posti_liberi into posti FROM spettacolo WHERE id_spett = NEW.id_spett;
if posti > 0 THEN
UPDATE spettacolo SET posti_liberi = posti_liberi - 1 WHERE spettacolo.id_spett = NEW.id_spett;
end if
end $$
DELIMITER ;
mi dia errore di sintassi nella query SQL vicino a 'end' linea 13
p.s. in mysql... |
CaboM.BNA |
manca il ; dopo il "end if"...
code: .... end if;...
|
number15 |
code: DELIMITER $$
CREATE TRIGGER agg_conto BEFORE INSERT
ON posto
FOR EACH ROW
BEGIN
SELECT distinct id_spettatore, conto
FROM posto, utente
WHERE id_spettatore = id_utente;
if conto >= 0.2
then
UPDATE utente
set conto = conto - 0.2
where id_spettatore = id_utente
END $$
DELIMITER ;
Cos'ha che non va?
Mi da errore:
Script line: 2 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 'END' at line 15 |
DarkSchneider |
; dopo la 2° routine di update...
anche se mi intendo di oracle, non di postgre...
ma dovrebbe essere uguale.. |
number15 |
Io di nessuno dei due :D
Potresti farmi vedere precisamente dove mettere il ;
Ho provato dopo utente, dopo 0.2 e dopo id_utente ma niente |
CaboM.BNA |
code:
...
if conto >= 0.2
then
UPDATE utente
set conto = conto - 0.2
where id_spettatore = id_utente;
...
cosi dovrebbe funzionare... |
number15 |
Niente:
Script line: 2 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 '' at line 15 |
marbliss |
Secondo me manca un ; dopo END (prima di $$) |
dafth |
prova così
-- CREAZIONE FUNZIONE TRIGGER
CREATE OR REPLACE FUNCTION trg_function()
RETURNS trigger AS
$$
BEGIN
---- ISTRUZIONI DA ESEGUIRE
END ;
$$ LANGUAGE 'plpgsql';
-- AGGIUNTA TRIGGER ALLA TABELLA
CREATE TRIGGER nometrigger BEFORE INSERT ON nometabella
FOR EACH ROW EXECUTE PROCEDURE trg_function(); |
Lallac10 |
Ciao a tutti ho una domanda qualcuno sa come usare l'array T_ARGV[] in cui vengono passati i parametri dell'inserimento prima che il trigger autorizzi l'inserimento? grazie! |
Pietman |
Secondo voi cosa si intende per questa frase delle modalità di consegna:
"Esauriente descrizione delle funzioni realizzate, l'elenco dei prodotti software e dei linguaggi utilizzati"
Funzioni sta per:
- Funzioni realizzate nei linguaggi php, plpgsql, etc.
o
-Funzionalità dell'applicazione realizzata, es. spiegare come abbiamo implementato il sistema di prenotazione, etc.
? |
|
|
|