Famosissimo server sqlTorno a scrivere trigger in python, semmai.
[MySQL] Problema stupido con trigger
#81
Inviato 18 giugno 2011 - 20:21
#82
Inviato 18 giugno 2011 - 20:24
?[/url]":1ltp2sog] CREATE TRIGGER tr_incasso BEFORE UPDATE ON Storico_vendite
AS
DECLARE ...
...
non funziona , sempre errore di sintassi a riga 2
fc, lo lascio com'è, per il tempo che abbiamo fatto i trigger (1 lezione) non mi stanno a rompere il cazzo per i declare dentro al for each.
http://dev.mysql.com...te-trigger.html
http://dev.mysql.com...en/declare.html
RTFM!
No, dico sul serio, la documentazione di MySQL è un pò casinara ma è completa
#83
Inviato 18 giugno 2011 - 20:25
Famosissimo server sql [/quote]
E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda)
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".
#84
Inviato 18 giugno 2011 - 20:28
Questa mi mancava... pensavo che si interfacciasse al sql server, non che ne avesse uno suo
?[/url]":1z7vobt4]
Famosissimo server sql
E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda)
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".
edit: Anche perché proprio di recente ho dovuto "designare" il nostro "gestore progetti" ed un'alternativa era proprio python + postgres. Non ho trovato nulla che parlasse di python sql server.
#85
Inviato 18 giugno 2011 - 20:37
?[/url]":qlroldy6] Ah ma avete idea di perchè Mysql saltì a piè pari i CHECK?
non sono scemo io eh,
cioè non mi pare una cosina da niente
Easy, non sono supportati.
Le constraint al massimo puoi metterle nel codice, a che serve metterle nel DB?
Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto?
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato
Scriverò tipo "visto i limiti di mysql (niente check, niente raise_application_error, etc), il controllo sui vincoli di integrità, quando non risolvibili tramite applicazione di valori di default via trigger, viene fatta da php", boh
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#86
Inviato 18 giugno 2011 - 20:39
?[/url]":18nmpicy]
non funziona , sempre errore di sintassi a riga 2
fc, lo lascio com'è, per il tempo che abbiamo fatto i trigger (1 lezione) non mi stanno a rompere il cazzo per i declare dentro al for each.
http://dev.mysql.com...te-trigger.html
http://dev.mysql.com...en/declare.html
RTFM!
No, dico sul serio, la documentazione di MySQL è un pò casinara ma è completa
avevo già letto prima di aprire il topic, non ci sono esempi di trigger con il for each row e variabili dichiarate/inizializzate fuori
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#87
Inviato 18 giugno 2011 - 20:41
Questa mi mancava... pensavo che si interfacciasse al sql server, non che ne avesse uno suo?[/url]":1rkmm8lz]
E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda)
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".
edit: Anche perché proprio di recente ho dovuto "designare" il nostro "gestore progetti" ed un'alternativa era proprio python + postgres. Non ho trovato nulla che parlasse di python sql server.
Semplicemente perché non esiste.
#88
Inviato 18 giugno 2011 - 20:45
#89
Inviato 18 giugno 2011 - 22:01
Leggendo dal mio libro di testo, il for each row non è che delimiti una parte del trigger, è semplicemente una clausola che dice
-se non lo metti: deve essere attivato una sola volta (anche in caso di inserimento/update/cancellazione multiplo)
-se lo metti: deve essere attivato prima/dopo l'inserimento/update/cancellazione di ogni riga
Quindi non cambia niente dichiarare le variabili prima o dopo il for each row, lo lascio com'è e basta
CREATE TRIGGER tr_incasso BEFORE UPDATE ON Storico_vendite FOR EACH ROW BEGIN DECLARE prezzo_n FLOAT; DECLARE prezzo_ns FLOAT; DECLARE prezzo_r FLOAT; DECLARE prezzo_rs FLOAT; DECLARE prezzo_c FLOAT; DECLARE prezzo_cs FLOAT; SELECT prezzo FROM Biglietti WHERE tipo="normale" into prezzo_n; SELECT prezzo FROM Biglietti WHERE tipo="normale_s" into prezzo_ns; SELECT prezzo FROM Biglietti WHERE tipo="ridotto" into prezzo_r; SELECT prezzo FROM Biglietti WHERE tipo="ridotto_s" into prezzo_rs; SELECT prezzo FROM Biglietti WHERE tipo="comitiva" into prezzo_c; SELECT prezzo FROM Biglietti WHERE tipo="comitiva_s" into prezzo_cs; SET NEW.incasso=(prezzo_n*NEW.normale) + (prezzo_ns*NEW.normale_s) + (prezzo_r*NEW.ridotto) + (prezzo_rs*NEW.ridotto_s) + (prezzo_c*NEW.comitiva) + (prezzo_cs*NEW.comitiva_s); END;
Se sbaglio correggiutemi
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#90
Inviato 18 giugno 2011 - 22:15
done.correggetemi
dimmelo tu, cosa dovevo fare...
forse chissà, forse potrei cambiare...
#91
Inviato 18 giugno 2011 - 23:39
Si, mi sbagliavo perchè stavo pensando a MSSQL e tu invece mi avevi postato un trigger in MySQL che, per quanto utilizzino entrambi l'SQL, hanno delle differenze di sintassi.Nex, mi sa che ti sbagliavi di grosso.
E da quello che mi hai scritto deduco che quel "FOR EACH" è semplicemente una parte della dichiarazione del trigger, io pensavo fosse un ciclo all'interno dello stesso.
#92
Inviato 19 giugno 2011 - 08:52
Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto?
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato
Scriverò tipo "visto i limiti di mysql (niente check, niente raise_application_error, etc), il controllo sui vincoli di integrità, quando non risolvibili tramite applicazione di valori di default via trigger, viene fatta da php", boh
Ma per il progetto di basi di dati non era fortemente consigliato usare PostgreSQL?
Almeno, dalle mie parti era così (nonostante qualcuno fosse andato dal professore a chiedergli se poteva usare wordpress )
avevo già letto prima di aprire il topic, non ci sono esempi di trigger con il for each row e variabili dichiarate/inizializzate fuori
Ma infatti hai ragione tu a metterlo dentro, perchè non si può mettere fuori sotto MySQL.
DECLARE is permitted only sta gran ceppa di minchia terrona a BEGIN ... END compound statement and must be at its start, before any other statements.
Solitamente in pl/pgsql o pl/sql il declare sta "prima" del begin della funzione.
Questa mi mancava... pensavo che si interfacciasse al sql server, non che ne avesse uno suo
edit: Anche perché proprio di recente ho dovuto "designare" il nostro "gestore progetti" ed un'alternativa era proprio python + postgres. Non ho trovato nulla che parlasse di python sql server.
Parlavo proprio di PostgreSQL, non c'è nessun "python sql server".
Il problema della versione ufficiale di plpython è che ha problemi seri con gli errori, tra l'altro... Però ce ne sta una versione python3 only piuttosto completa (e vuoi mettere python contro pl/sql in fatto di completezza del linguaggio? ).
#93
Inviato 19 giugno 2011 - 09:32
Se fai una insert di 100 records, il "for each" dice appunto "per ogni record inserito".
Per questo si deve mettere la declare dentro e non fuori visto che il trigger crea una funzione che verrà chiamata per ogni record. Quando si scrive un trigger bisogna immaginare cosa creerà il trigger che non è proprio quello che scriviamo noi.
#94
Inviato 19 giugno 2011 - 12:03
Mi riferivo all'uso di "AS" che in MySQL non c'è...Il "for each ..." è ansi sql non è che mysql lo faccia a modo suo.
Se fai una insert di 100 records, il "for each" dice appunto "per ogni record inserito".
Per questo si deve mettere la declare dentro e non fuori visto che il trigger crea una funzione che verrà chiamata per ogni record. Quando si scrive un trigger bisogna immaginare cosa creerà il trigger che non è proprio quello che scriviamo noi.
Il discorso dei DECLARE dentro al ciclo l'avevo già spiegato sopra.
#95
Inviato 19 giugno 2011 - 12:50
?[/url]":pm2focvt]
Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto?
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato
Scriverò tipo "visto i limiti di mysql (niente check, niente raise_application_error, etc), il controllo sui vincoli di integrità, quando non risolvibili tramite applicazione di valori di default via trigger, viene fatta da php", boh
Ma per il progetto di basi di dati non era fortemente consigliato usare PostgreSQL?
Almeno, dalle mie parti era così (nonostante qualcuno fosse andato dal professore a chiedergli se poteva usare wordpress )
Noi lo dobbiamo fare obbligatoriamente in mysql, sul server dell'uni.
Figurati che il server è raggiungibile solo dal lab dell'uni, dovrei essere là per farlo
Sto sfruttando un altro hosting, poi esporto tutto là il giorno prima della consegna
Inb4 l'import non funziona e rimando l'esame a luglio
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#96
Inviato 19 giugno 2011 - 12:51
?[/url]":3hhsvee5]
Ma per il progetto di basi di dati non era fortemente consigliato usare PostgreSQL?
Almeno, dalle mie parti era così (nonostante qualcuno fosse andato dal professore a chiedergli se poteva usare wordpress )
Noi lo dobbiamo fare obbligatoriamente in mysql, sul server dell'uni.
Figurati che il server è raggiungibile solo dal lab dell'uni, dovrei essere là per farlo
Sto sfruttando un altro hosting, poi esporto tutto là il giorno prima della consegna
Inb4 l'import non funziona e rimando l'esame a luglio
Esportati un dump SQL con create e insert
#97
Inviato 19 giugno 2011 - 12:58
?[/url]":12otqrfh]
Noi lo dobbiamo fare obbligatoriamente in mysql, sul server dell'uni.
Figurati che il server è raggiungibile solo dal lab dell'uni, dovrei essere là per farlo
Sto sfruttando un altro hosting, poi esporto tutto là il giorno prima della consegna
Inb4 l'import non funziona e rimando l'esame a luglio
Esportati un dump SQL con create e insert
sisi era quella l'intenzione, ne ho fatto prima uno di prova... esporta tutto tranne le stored procedures (i trigger sì).. ma non è un problema, le ho salvate a parte
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici
#98
Inviato 19 giugno 2011 - 13:09
Noi lo dobbiamo fare obbligatoriamente in mysql, sul server dell'uni.
Cioè, aspetta, dovete mettere dei vincoli d'integrità su un db che non li supporta?
Sicuro che non si riferiscano solamente a chiavi primarie/uniche?
#99
Inviato 19 giugno 2011 - 13:14
?[/url]":2l86meib]
Noi lo dobbiamo fare obbligatoriamente in mysql, sul server dell'uni.
Cioè, aspetta, dovete mettere dei vincoli d'integrità su un db che non li supporta?
Sicuro che non si riferiscano solamente a chiavi primarie/uniche?
Bah, è vago, non è neanche scritto che dobbiamo, lo faccio perchè sarebbe imho stupido NON FARLO.
Se vi fossero altri vincoli ritenuti significativi se ne può dare una descrizione testuale o in linguaggio semi-formale, come visto a lezione.
Come implementazione di SQL andrà utilizzato il sistema MySQL
Ma vabè, faccio i controlli da php e ceste.
FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
Mai più giorni felici