[Db] contatore server side

Francesco F franco a inpe.unipi.it
Gio 1 Feb 2007 08:32:21 CET


On 01/02/2007 0.02, Marcello Vezzelli wrote:
> Spero che Francesco posti la sua implementazione con la procedura al 
> posto della funzione, è molto interessante.

Dopo aver fatto alcune prove con le function, sono passato alle store 
procedure e, apparentemente funziona:

## StoreProcedure ##
create procedure getNewID (IN p_anno int(4), OUT p_newID INT)
BEGIN
select (if(isnull(max(id)), 0, max(id)) + 1) into p_newID  from tabella 
where tabella.anno = p_anno;
END;//

## Trigger ##
create trigger getNewID BEFORE INSERT ON tabella
for each row
BEGIN
call getNewID(NEW.anno, @newID);
SET NEW.id = @newID;
END;


Per completezza, riporto anche la struttura di "tabella":
CREATE TABLE `tabella` (
   `anno` int(4) NOT NULL,
   `id` int(4) NOT NULL,
   `txt` varchar(16) NOT NULL,
   PRIMARY KEY  (`anno`,`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;


Non sono ferrato in sql, ne approfitto per far due domande:

1 - è preferibile utilizzare nella SP il max(id) oppure un ordinamento 
decrescente della tabella per id, con un limit 0,1?

2 - è possibile che due processi concorrenti ottengono lo stesso newID?

	Francesco


Maggiori informazioni sulla lista Db