[Db] contatore server side
Marcello Vezzelli
marcello a vezz.it
Mar 30 Gen 2007 15:32:47 CET
Marcello Vezzelli wrote:
> Le tabelle di supporto le devo creare così:
>
> CREATE TABLE IF NOT EXISTS conta2006 (id INT NOT NULL AUTO_INCREMENT
> PRIMARY KEY) ENGINE = innodb;
> CREATE TABLE IF NOT EXISTS conta2007 (id INT NOT NULL AUTO_INCREMENT
> PRIMARY KEY) ENGINE = innodb;
> CREATE TABLE IF NOT EXISTS conta2008 (id INT NOT NULL AUTO_INCREMENT
> PRIMARY KEY) ENGINE = innodb;
>
> Alcune osservazioni...
>
> Avevo messo la create table dentro alla procedura get_counter, ma
> mysql mi dice picche (non si possono creare tabelle in un trigger).
Domanda che mi ero fatto a suo tempo quando è partito il thread...
ma c'è modo di evitare tabelle di appoggio per l'id autoincrementante?
La soluzione sarebbe modificare l'implementazione della get_counter() in
questo modo:
delimiter //
DROP FUNCTION IF EXISTS get_counter //
CREATE FUNCTION get_counter( myanno INT ) RETURNS INT
BEGIN
SET @myid = 0;
SELECT @myid:=fatture.id FROM fatture WHERE anno=@myanno ORDER BY id
DESC LIMIT 1;
IF @myid = NULL THEN
SET @myid=1;
ELSE
SET @myid=@myid+1;
END IF;
RETURN (@myid);
END //
delimiter ;
Ovvero quando faccio l'inserimento, faccio una select dell'ultimo id per
quell'anno, lo incremento, e lo uso come id del nuovo record.
Tutto molto bello, peccato che mysql dica:
ERROR 1415 (0A000): Not allowed to return a result set from a function
Se eseguo il codice fuori dal trigger, tutto funziona...
quindi deduco che dentro a un trigger non si possono eseguire delle SELECT.
Bella fregatura!
Aggiungo anche che è una sofferenza per me cercare informazioni
sull'help in linea di mysql.
Spesso i comandi sono descritti malissimo e si capisce veramente
qualcosa solo guardando gli esempi degli utenti... che di solito
scrivono "dopo averci perso due ore ecco come fare per..."
C'è qualcosa che non va. :|
Alcuni articoli interessanti a proposito di trigger:
http://www.stardata.it/articoli_it/triggers_on_select_articoli_it.html
http://database.html.it/articoli/stampa/1973/trigger-in-mysql-5/
Saluti
Marcello
Maggiori informazioni sulla lista
Db