quinta-feira, 31 de maio de 2012

Insert com Incrementador

Imagine que temos a tabela CLIENTE com os campos ID_CLIENTE, NOME e IDADE. Sabendo que o campo ID_CLIENTE é um incrementador, ou seja, a cada cliente cadastrado ele soma um, a melhor solução é a seguinte:

INSERT INTO CLIENTE (ID_CLIENTE, NOME, IDADE) VALUES ((SELECT NVL( MAX(ID_CLIENTE), 0)  + 1 FROM CLIENTE) ,  'Renato', 24)

Traduzindo: Inclua na tabela cliente nos campos ID_CLIENTE, NOME, IDADE os valores: Maximo ID_CLIENTE cadastrado + 1, Nome Renato , Idade 24.

O comando NVL é necessário no select pois quando não houver nenhum cliente cadastrado o valor retornado será nulo, sendo assim teremos problemas ao somar nulo + 1. O NVL substitui valor nulo por Zero e resolve esse problema.