Vai al contenuto


Foto

[MySQL] Problema stupido con trigger


Questa discussione e' stata archiviata Questo significa che non e' possibile rispondere
99 risposte a questa discussione

#81 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 18 giugno 2011 - 20:21

Torno a scrivere trigger in python, semmai. :patpat:

Famosissimo server sql :poker:
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#82 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 18 giugno 2011 - 20:24

?[/url]":1ltp2sog] CREATE TRIGGER tr_incasso BEFORE UPDATE ON Storico_vendite

AS

DECLARE ...
...



non funziona :patpat:, 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! :poker:
No, dico sul serio, la documentazione di MySQL è un pò casinara ma è completa :trollface:
In Soviet Italy, the evil army owns you!

#83 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 18 giugno 2011 - 20:25

[quote name="trallallero ?":a6gxk2ia] [quote name='"MadJackal ?":a6gxk2ia]Torno a scrivere trigger in python' date=' semmai. :patpat: [/quote']
Famosissimo server sql :poker:[/quote]

E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda) :trollface:
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".
In Soviet Italy, the evil army owns you!

#84 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 18 giugno 2011 - 20:28

?[/url]":1z7vobt4]
Famosissimo server sql :poker:


E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda) :trollface:
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".

Questa mi mancava... pensavo che si interfacciasse al sql server, non che ne avesse uno suo :patpat:

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.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#85 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

Inviato 18 giugno 2011 - 20:37

?[/url]":qlroldy6] Ah ma avete idea di perchè Mysql saltì a piè pari i CHECK? :trollface:

non sono scemo io eh,


cioè non mi pare una cosina da niente :poker:


Easy, non sono supportati.
Le constraint al massimo puoi metterle nel codice, a che serve metterle nel DB? :patpat:


Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto? :okay:
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato :poker:

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 :okay:

FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#86 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

Inviato 18 giugno 2011 - 20:39

?[/url]":18nmpicy]


non funziona :patpat:, 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! :poker:
No, dico sul serio, la documentazione di MySQL è un pò casinara ma è completa :trollface:



avevo già letto prima di aprire il topic, non ci sono esempi di trigger con il for each row e variabili dichiarate/inizializzate fuori :poker:

FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#87 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

Inviato 18 giugno 2011 - 20:41

?[/url]":1rkmm8lz]

E' famosissimo sì, ci fanno pure conference annuali... in Germania (anche se quest'anno mi pare vogliano farla in Olanda) :poker:
Ed i trigger puoi scriverli in una mezza dozzina di linguaggi (C incluso). E così pure per le "funzioni".

Questa mi mancava... pensavo che si interfacciasse al sql server, non che ne avesse uno suo :patpat:

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 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 18 giugno 2011 - 20:45

Ah ecco appunto, l'avrei trovato altrimenti.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#89 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

Inviato 18 giugno 2011 - 22:01

Nex, mi sa che ti sbagliavi di grosso.

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 Sgobbone

Sgobbone

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 56.432 Messaggi:

Inviato 18 giugno 2011 - 22:15

correggetemi

done.

Tc5wAeT.jpg

dimmelo tu, cosa dovevo fare...
forse chissà, forse potrei cambiare...


#91 Nex

Nex

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 19.500 Messaggi:

Inviato 18 giugno 2011 - 23:39

Nex, mi sa che ti sbagliavi di grosso.

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.

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.
Then I went to my pretty rose tree / To tend her by day and by night / But my rose turned away with jealousy / And her thorns were my only delight...

#92 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

Inviato 19 giugno 2011 - 08:52


Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto? :wink:
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato :pua:

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 :pua:


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 :gay:)


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.

:pua:

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 :better:

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". :asd:
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? ;)).
In Soviet Italy, the evil army owns you!

#93 trallallero

trallallero

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 16.188 Messaggi:

Inviato 19 giugno 2011 - 09:32

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.
Don't worry, faith will come soon, like a recall but,
if you can't wait, just stop thinking at all 

 


#94 Nex

Nex

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 19.500 Messaggi:

Inviato 19 giugno 2011 - 12:03

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.

Mi riferivo all'uso di "AS" che in MySQL non c'è...

Il discorso dei DECLARE dentro al ciclo l'avevo già spiegato sopra.
Then I went to my pretty rose tree / To tend her by day and by night / But my rose turned away with jealousy / And her thorns were my only delight...

#95 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

Inviato 19 giugno 2011 - 12:50

?[/url]":pm2focvt]
Ma lo penso anch'io, il problema è: come lo scrivo nella relazione del progetto? :wink:
Nella sezione "vincoli d'integrità" dovrò dire che i vincoli vengono controllati da php, il che è concettualmente strasbagliato :pua:

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 :pua:


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 :gay:)



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 :better:


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 :pua:

FIRMA FOTTUTAMENTE EDITATA. IL FOTTUTO STAFF.
 

Mai più giorni felici


#96 LilithSChild

LilithSChild

    Schiavo

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 12.764 Messaggi:

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 :pua:)



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 :pua:


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 :pua:


Esportati un dump SQL con create e insert :better:

#97 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

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 :pua:


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 :pua:


Esportati un dump SQL con create e insert :better:



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 MadJackal

MadJackal

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStelletta
  • 3.105 Messaggi:

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?
In Soviet Italy, the evil army owns you!

#99 toyo

toyo

    sono triste

  • Donatori di sperma
  • StellettaStellettaStellettaStellettaStellettaStellettaStelletta
  • 43.996 Messaggi:

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


#100 Sgurbat

Sgurbat

    Schiavo

  • Membri
  • StellettaStellettaStellettaStellettaStellettaStelletta
  • 9.772 Messaggi:

Inviato 28 giugno 2011 - 18:37

[quote name="trallallero ?":11i474u4] [quote name='"MadJackal ?":11i474u4]Torno a scrivere trigger in python' date=' semmai. :trollface: [/quote']
Famosissimo server sql :cereal:[/quote]

Cristo santo!

Immagine inserita

We are what we repeatedly do. Excellence, then, is not an act, but a habit. (Aristotele)