要想知道怎么定义第一步要知道oracle中decode是怎么实现呢?
decode(expression,value1,result1,value2,result2,value3,result3…,default)
如果expression=value1,则输出result1,expression=value2,输出reslut2,expression=value3,输出result3,
若expression不等于所列出的所有value,则输出为default
就是说在decdoe中,拿出第一个值是对比后面值,键值对类型返回,如果条件不为key值,那么就返回最后默认值。
在我的迁移过程中,我们试图的参数大部分为四个参数的decode,那么我就定义一个为四个参数的decode
需要注意一点正常思路用键值对做比较走下来会发现如果参数为null,那么在mysql中将不会做比较,特殊处理后为以下情况:
CREATE FUNCTION decode_oracle(pattern VARCHAR(255),string_a VARCHAR(255),string_b VARCHAR(255),string_c VARCHAR(255)) RETURNS varchar(255)
BEGIN
DECLARE result VARCHAR(255) DEFAULT "";
#正常对比函数
if pattern=string_a then
set result = string_b;
ELSEIF pattern=string_b then
set result = string_c;
ELSEIF pattern=string_c then
set result = string_c;
#处理空值
ELSEIF string_a is null then
if pattern is not null then
set result = string_c;
ELSE
set result = string_b;
end if;
ELSEIF string_b is null then
set result = string_c;
ELSEIF string_c is null then
set result = string_c;
ELSE
set result = string_c;
END IF;
RETURN result;
END;