Como obter o próximo valor de um campo auto-incremental no mysql

Quem trabalha com o Oracle PL/SQL sabe que você pode obter isso através do NextVal() da seqüência, mas como fazer isso no MySQL?

Eu estava tentando gerar um código Hash para ser utilizado como uma referência externamente a um documento – para não exibir o ID interno usado na tabela -, mas não queria utilizar duas consultas (Um insert, e um select para obter o valor inserido).

Para resolver este problema em uma consulta apenas, criei uma função no banco de dados que me retornaria este valor:

</p>
<p>CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))<br />
	RETURNS BIGINT<br />
	LANGUAGE SQL<br />
	NOT DETERMINISTIC<br />
	CONTAINS SQL<br />
	SQL SECURITY DEFINER<br />
	COMMENT ''<br />
BEGIN</p>
<p>DECLARE Value BIGINT;</p>
<p>SELECT<br />
	AUTO_INCREMENT INTO Value<br />
FROM<br />
	information_schema.tables<br />
WHERE<br />
	table_name = TableName AND<br />
	table_schema = DATABASE();</p>
<p>RETURN Value;</p>
<p>END<br />

Para utilizar esta função, basta passar como parâmetro o nome da tabela que se deseja obter o valor do próximo ID (campo auto-incremental):

<br />
SELECT getAutoincrementalNextval ('document')<br />

No meu código, para gerar o Hash para o documento, fiz da seguinte forma:

<br />
INSERT INTO<br />
    document (Code, Title, Body)<br />
VALUES (<br />
    sha1( concat (convert (now(), char), ' ', getAutoincrementalNextval ('document') ) ),<br />
    'Title',<br />
    'Body'<br />
);<br />

Este código hash foi apenas uma forma de não expor ao usuário o código interno de meu documento. Para gerar um código único eu crio uma pré-imagem SHA-1 baseada na junção da hora atual e o ID do registro.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *