-- 创建类似于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;

最新文章

  1. CAS原子锁 高效自旋无锁的正确用法
  2. HTML5[5]:在移动端禁用长按选中文本功能
  3. eclipse 发布APK
  4. 4-3 yum命令
  5. 2015.1写留言板的时用的 知识点和函数 ---&gt;总结
  6. [转帖]SD卡&amp;FLASH&amp;USB
  7. Android(java)学习笔记257:JNI之helloword案例(利用NDK工具)
  8. python手记(9)
  9. solr 的 field, copyfield ,dynamic field
  10. handsontable 属性汇总
  11. Docker学习笔记 - Docker Compose 脚本命令
  12. C# 获取当前年份的周期,周期所在日期范围
  13. 使用try-with-resources优雅的关闭IO流
  14. 【LeetCode每天一题】Set Matrix Zeroes(设置0矩阵)
  15. const修饰指针+volatile +restrict
  16. spring-boot-2.0.3之redis缓存实现,不是你想的那样哦!
  17. WEB 安全学习 一、mysql 注入漏洞
  18. Visual Studio 2015+InstallShield 2015
  19. Python3基础 file open+write 对不存在的txt进行创建与写入
  20. Golang之时间、日期类型

热门文章

  1. 网络通信 --&gt; Socket、TCP/IP、HTTP、FTP及网络编程
  2. [bzoj3173]最长上升子序列_非旋转Treap
  3. Oracle中死锁与等待
  4. Linux下ping,telnet,ssh命令的比较
  5. (译文)学习ES6非常棒的特性——Async / Await函数
  6. 第2次作业:stream案例分析
  7. IT &amp; ME
  8. lambda及参数绑定
  9. 201621123060 《Java程序设计》第六周学习总结
  10. Exception in thread &quot;main&quot; expected &#39;&lt;document start&gt;&#39;, but found BlockMappingStart in &#39;reader&#39;, line 23, column 2: nimbus.host: &quot;master&quot;