[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