创建类似于Oracle中decode的函数
-- 创建类似于Oracle中decode的函数
create or replace function decode(variadic p_decode_list text[])
returns text
as
$$
declare
-- 获取数组长度(即入参个数)
v_len integer := array_length(p_decode_list, 1);
-- 声明存放返回值的变量
v_ret text;
begin
/*
* 功能说明:模拟Oracle中的DECODE功能(字符串处理, 其它格式可以自行转换返回值)
* 参数说明:格式同Oracle相同,至少三个参数
* 实现原理: 1、VARIADIC 允许变参; 2、Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值,否则取最后一位值(最后一位为偶数为,否则为null)
*/
-- 同Oracle相同当参数不足三个抛出异常
if v_len >= 3 then
-- Oracle中的DECODE是拿第一个数依次和之后的偶数位值进行比较,相同则取偶数位+1的数值
for i in 2..(v_len - 1) loop
v_ret := null;
if mod(i, 2) = 0 then
if p_decode_list[1] = p_decode_list[i] then
v_ret := p_decode_list[i+1];
elsif p_decode_list[1] <> p_decode_list[i] then
if v_len = i + 2 and v_len > 3 then
v_ret := p_decode_list[v_len];
end if;
end if;
end if;
exit when v_ret is not null;
end loop;
else
raise exception 'UPG-00938: not enough args for function.';
end if;
return v_ret;
end;
$$
language plpgsql;
最新文章
- CAS原子锁 高效自旋无锁的正确用法
- HTML5[5]:在移动端禁用长按选中文本功能
- eclipse 发布APK
- 4-3 yum命令
- 2015.1写留言板的时用的 知识点和函数 --->;总结
- [转帖]SD卡&;FLASH&;USB
- Android(java)学习笔记257:JNI之helloword案例(利用NDK工具)
- python手记(9)
- solr 的 field, copyfield ,dynamic field
- handsontable 属性汇总
- Docker学习笔记 - Docker Compose 脚本命令
- C# 获取当前年份的周期,周期所在日期范围
- 使用try-with-resources优雅的关闭IO流
- 【LeetCode每天一题】Set Matrix Zeroes(设置0矩阵)
- const修饰指针+volatile +restrict
- spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
- WEB 安全学习 一、mysql 注入漏洞
- Visual Studio 2015+InstallShield 2015
- Python3基础 file open+write 对不存在的txt进行创建与写入
- Golang之时间、日期类型
热门文章
- 网络通信 -->; Socket、TCP/IP、HTTP、FTP及网络编程
- [bzoj3173]最长上升子序列_非旋转Treap
- Oracle中死锁与等待
- Linux下ping,telnet,ssh命令的比较
- (译文)学习ES6非常棒的特性——Async / Await函数
- 第2次作业:stream案例分析
- IT &; ME
- lambda及参数绑定
- 201621123060 《Java程序设计》第六周学习总结
- Exception in thread ";main"; expected &#39;<;document start>;&#39;, but found BlockMappingStart in &#39;reader&#39;, line 23, column 2: nimbus.host: ";master";