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:

[sourcecode language=”SQL”]

CREATE FUNCTION `getAutoincrementalNextVal`(`TableName` VARCHAR(50))
RETURNS BIGINT
LANGUAGE SQL
NOT DETERMINISTIC
CONTAINS SQL
SQL SECURITY DEFINER
COMMENT ”
BEGIN

DECLARE Value BIGINT;

SELECT
AUTO_INCREMENT INTO Value
FROM
information_schema.tables
WHERE
table_name = TableName AND
table_schema = DATABASE();

RETURN Value;

END
[/sourcecode]

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):

[sourcecode language=”SQL”]
SELECT getAutoincrementalNextval (‘document’)
[/sourcecode]

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

[sourcecode language=”SQL”]
INSERT INTO
document (Code, Title, Body)
VALUES (
sha1( concat (convert (now(), char), ‘ ‘, getAutoincrementalNextval (‘document’) ) ),
‘Title’,
‘Body’
);
[/sourcecode]

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 *