Segue um script para simular uso da função DECODE do SGBDR Oracle, nesta function, adaptei para situação em que o valor for zero,
por exemplo uma situação em que tem que dividir um valor por zero.
IF EXISTS ( SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[usf_decode_zero]') AND type IN (N'FN') ) DROP FUNCTION usf_decode_zero; GO CREATE FUNCTION usf_decode_zero(@param1 float, @param2 float) RETURNS float AS -- Nome Artefato/Programa..: usf_decode_zero.sql -- Autor(es)...............: Emerson Hermann (emersonhermann [at] gmail.com) O Peregrino (http://www.emersonhermann.blogspot.com) -- Data Inicio ............: 28/06/2012 -- Data Atualizacao........: 28/06/2012 -- Versao..................: 0.01 -- Compilador/Interpretador: T-SQL (Transact SQL) -- Sistemas Operacionais...: Windows -- SGBD....................: MS SQL Server 2005/2008 -- Kernel..................: Nao informado! -- Finalidade..............: Store Procedure (Function) verifica se o valor do primeiro parametro é igual a zero, retornando o valor do -- ........................: segundo parametro2, semalhante a função decode do Oracle, porém simplificado. -- OBS.....................: O primeiro parametro é um float, retorna o valor do segundo parametro que também é flaot, caso o primeiro -- ........................: parametro seja igual a zero, caso contrário retorna o valor do primeiro parametro. -- ........................: -- BEGIN RETURN ( SELECT CASE WHEN @param1 = 0 THEN @param2 ELSE @param1 END AS usf_decode_zero ) END; GO -- exemplo do uso da function SELECT dbo.usf_decode_zero (0,1200); --Retorno: 1200 SELECT dbo.usf_decode_zero (1100,1); --Retorno: 1100 SELECT dbo.usf_decode_zero (NULL,1); --Retorno: NULL -- exemplo tratando, o erro de divisão por zero, Mensagem 8134 (CLÁSSICA) SELECT 2400/dbo.usf_decode_zero(0,1); --Retorno: 2400 SELECT 2400/dbo.usf_decode_zero(2400,1); --Retorno: 1 SELECT 2400/dbo.usf_decode_zero(NULL,1); --Retorno: NULL
Nenhum comentário:
Postar um comentário