[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