No Borland InterBase 7.5 algumas novas funções descritas no padrão ANSI foram implementas, são as funções CASE, COALESCE e NULLIF.
Para entender o que cada uma faz iremos criar uma tabela, um generator e inserir alguns registros, abaixo segue o script para execução:
- Criação do Generator
create generator gen_id_cliente;
- Criação da Tabela
Create Table CLIENTE ( ID_CLIENTE Integer not null, nome varchar(40) not null, razao_social varchar(60), CPJ_CNPF varchar(18), Ativo Boolean, Saldo Numeric(15, 2 ), constraint pk_cliente primary Key ( id_cliente ) );
- Inserindo registros
Insert Into CLIENTE (ID_CLIENTE, NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO)
Values (gen_id(gen_id_cliente, 1), 'PADARIA DOCES E SABORES', ‘PADARIA DS', '1234567890', true, -100 );
Insert Into CLIENTE (ID_CLIENTE NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO)
Values (gen_id(gen_id_cliente, 1), 'PEDRO DA SILVA TADEU', null, '8415784548', false, 1200 );
Insert Into CLIENTE (ID_CLIENTE, NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO)
Values (gen_id(gen_id_cliente, 1), 'JOAO JOSE FARINHA', null, '3232242342', false, -10 );
Insert Into CLIENTE (ID_CLIENTE, NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO)
Values (gen_id(gen_id_cliente, 1), 'FLAVIA MARIA PEDROSCA', ‘FMP', '1294316576', true, 2554 );
Insert Into CLIENTE (ID_CLIENTE, NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO)
Values (gen_id(gen_id_cliente, 1), 'DEVMEDIA', ‘CLUBE DELPHI', '129431657600123', true, null );
Após execução dos scripts vamos entender as três novas funções.
CASE
Utilizado em situações em que várias condições determinam um valor de retorno diferente, mas do mesmo tipo.
O exemplo abaixo mostra uma coluna representando a situação do cliente em função do saldo, esta coluna será retornada com o nome de SITUACAO.
SELECT ID_CLIENTE, NOME, RAZAO_SOCIAL, CPJ_CNPF, ATIVO, SALDO,
CASE
WHEN SALDO < 0 THEN 'Cliente Devedor'
WHEN SALDO = 0 THEN 'Saldo zerado'
WHEN SALDO > 0 THEN 'Saldo Positivo'
ELSE
'Indefinido'
end as SITUACAO
FROM CLIENTE
COALESCE
Esta função é utilizada quando um conjunto de campos for passado e deve ser retornado o primeiro não nulo, esta função é muito útil quando se quer fazer uma soma de campos numéricos e um deles é nulo, com esta função podemos retornar zero quando campo for nulo.
O exemplo abaixo retorna a coluna com o nome que não for nulo entre o campo NOME e RAZAO_SOCIAL já a coluna SALDO irá retornar zero quando a coluna for nulo.
SELECT
ID_CLIENTE, COALESCE( NOME, RAZAO_SOCIAL ) as NOME_APRESENTACAO,
NOME, RAZAO_SOCIAL, COALESCE( SALDO, 0.0) as SALDO
FROM CLIENTE
NULLIF
Esta função é utilizada para comparação de dois parâmetros, sendo os dois iguais o retorno será null, caso contrário o primeiro parâmetro será retornado.
O exemplo abaixo retorna null quando a coluna saldo tiver o saldo igual a -10.
SELECT
ID_CLIENTE, NOME, RAZAO_SOCIAL, saldo, NULLIF( SALDO, -10) as SALDO_nullif
FROM
CLIENTE
Conclusões
Estas funções são muito úteis no dia a dia, o padrão ANSI-99 especifica estas funções, portanto se os bancos de dados implementarem estas funções os exemplos acima poderão ser utilizados, no caso da função CASE esta poderá ser utilizada em InterBase 7.5, SQL Server, Oracle e DB2.