管道函数即是可以返回行集合(可以使嵌套表nested table 或数组 varray)的函数,我们可以像查询物理表一样查询它或者将其赋值给集合变量。KingbaseES 数据库可以用 setof 实现类似 Oracle 的pipelined 功能,C5版本开始,也支持pipeline。

一、Oracle pipelined 使用例子

  1. create or replace type varchar_type as table of varchar(100);

    create or replace function func_pipeline_test return varchar_type
  2. pipelined as
  3. begin
  4. for i in 1..5 loop
  5. pipe row('Pipeline '||i||' '||systimestamp);
  6. dbms_lock.sleep(1);
  7. end loop;
  8. return;
  9. end;
  10. /
  11.  
  12. SQL> select * from table(func_pipeline_test);
  13.  
  14. COLUMN_VALUE
  15. --------------------------------------------------------------------------------
  16. Pipeline 1 01-JUL-21 07.22.21.630651000 PM +08:00
  17. Pipeline 2 01-JUL-21 07.22.22.630975000 PM +08:00
  18. Pipeline 3 01-JUL-21 07.22.23.631054000 PM +08:00
  19. Pipeline 4 01-JUL-21 07.22.24.631381000 PM +08:00
  20. Pipeline 5 01-JUL-21 07.22.25.631216000 PM +08:00

二、KingbaseES

1、pipelined

从V8R6C5 开始,KingbaseES 支持 pipeline,其使用与 Oracle 完全相同。

  1. create or replace type varchar_type as table of varchar(100);
  2.  
  3. create or replace function func_pipeline_test return varchar_type
  4. pipelined as
  5. begin
  6. for i in 1..5 loop
  7. pipe row('Pipeline '||i||' '||systimestamp);
  8. perform pg_sleep(1);
  9. end loop;
  10. return;
  11. end;
  12. /
  13.  
  14. test=# select * from table(func_pipeline_test());
  15. column_value
  16. ------------------------------------------
  17. Pipeline 1 2021-12-22 15:26:45.572780+08
  18. Pipeline 2 2021-12-22 15:26:45.572780+08
  19. Pipeline 3 2021-12-22 15:26:45.572780+08
  20. Pipeline 4 2021-12-22 15:26:45.572780+08
  21. Pipeline 5 2021-12-22 15:26:45.572780+08
  22. (5 rows)

2、setof 使用例子

  1. create or replace function func_pipeline_test1 returns setof text as
  2. declare
  3. v_text text;
  4. begin
  5. for i in 1..5 loop
  6. return query select 'Pipeline '||i||' '||clock_timestamp() ;
  7. perform sys_sleep(1);
  8. end loop;
  9. return;
  10. end
  11. /
  12.  
  13. test=# select func_pipeline_test1();
  14. func_pipeline_test1
  15. ------------------------------------------
  16. Pipeline 1 2021-09-13 17:36:55.571164+08
  17. Pipeline 2 2021-09-13 17:36:56.572743+08
  18. Pipeline 3 2021-09-13 17:36:57.574097+08
  19. Pipeline 4 2021-09-13 17:36:58.575511+08
  20. Pipeline 5 2021-09-13 17:36:59.577169+08
  21.  
  22. (5 rows)
  23.  
  24. create or replace function func_pipeline_test2 returns setof t1 as
  25. declare
  26. v_t1 t1%rowtype;
  27. begin
  28. for v_t1 in (select * from t1) loop
  29. return next v_t1;
  30. end loop;
  31. return;
  32. end
  33. /

  34. test=# select * from func_pipeline_test2();
  35. id | name
  36. ----+------
  37. 1 | abc
  38. 2 | abc
  39. 3 | abc
  40. 4 | abc
  41. 5 | abc
  42. 6 | abc
  43. 7 | abc
  44. 8 | abc
  45. 9 | abc
  46. 10 | abc
  47. (10 rows)

3、table function

  1. create or replace type int_set as table of integer;
  2.  
  3. create or replace function func1() return int_set as
  4. v_temp int_set := int_set(1,2,3);
  5. begin
  6. return v_temp;
  7. end;
  8.  
  9. test=# select func1();
  10. func1
  11. ----------------
  12. int_set(1,2,3)
  13. (1 row)
  14.  
  15. test=# select * from table(func1());
  16. column_value
  17. --------------
  18. 1
  19. 2
  20. 3

  

KingbaseES 如何实现Oracle pipelined 功能的更多相关文章

  1. 转-利用Oracle审计功能来监测试环境的变化

    http://blog.csdn.net/luowangjun/article/details/5627102利用Oracle审计功能来监测试环境的变化 做过测试的人都应该会碰到这样的情况:测试发现的 ...

  2. Oracle Pipelined Table Functions简介

    转自: http://www.linuxidc.com/Linux/2011-05/35797.htm //概况   //基本上,当你希望一个PLSQL(或者java或者c)程序作为数据源,而不是表, ...

  3. KingbaseES V8R6兼容Oracle的exp-imp导出导入工具使用

    说明: KingbaseES V8R6版本中的兼容Oracle的exp-imp导入导出工具,支持完全模式.用户模式和表模式的导出功能. 本次案例数据库版本: test=# select version ...

  4. KingbaseES CTID 与 Oracle ROWID

    熟悉oracle的人都知道ROWID可用于快速的数据访问,KingbaseES 由于自身MVCC机制的原因,ctid 作为 oracle rowid 的替代方案不合适,但currtid 还是基本可以满 ...

  5. [转]ORACLE 审计功能

    审计是对选定的用户动作的监控和记录,通常用于: u          审查可疑的活动.例如:数据被非授权用户所删除,此时安全管理员可决定对该 数据库的所有连接进行审计,以及对数据库的所有表的成功地或不 ...

  6. 转- Oracle Audit 功能的使用和说明

    http://blog.itpub.net/9399028/viewspace-712457/审计(Audit) 用于监视用户所执行的数据库操作,审计记录可存在数据字典表(称为审计记录:存储在syst ...

  7. 利用ORACLE ADV 功能完成SQL TUNING 调优(顾问培训) “让DBA失业还是解脱?”

    oracle自动判断SQL性能功能. 11G的ADV,建议.SNAPSHOT,数据集合, 存储在oracle sys $_开头的表(10几条).  创建SNAPSHOT时选择天数, 默认14天. sq ...

  8. 有关mysql实现oracle分析函数功能的方法

    目前公司erp开发有一个脚本需求:对于收款合同审批单和收款合同(n:1),需要获取收款审批单中最新的一条审批记录来更新其对应的收款合同的相关信息. 难点主要在对相同类别的属性进行分组然后组内排序(分组 ...

  9. oracle 审计功能

    Oracle 11g推出了审计功能,但这个功能会针对很多操作都产生审计文件.aud,日积月累下来这些文件也很多,默认情况下,系统为了节省资源,减少I/0操作,其审计功能是关闭的 一.审计功能关闭 1. ...

随机推荐

  1. 使用Karmada实现Helm应用的跨集群部署

    摘要:借助Karmada原生API的支持能力,Karmada可以借助Flux轻松实现Helm应用的跨集群部署. 本文分享自华为云社区< 使用Karmada实现Helm应用的跨集群部署[云原生开源 ...

  2. 疫情在校学生之——用python对某校园热水服务app进行测试,实现自动免费用水(仅供参考)

    写在前面的过场话: 本文只是对某校园热水服务app做个测试,其实本人并没有做大坏事,并未传播相关技术,文章以下内容的敏感部分会打码,并且相关厂商已经正在进行漏洞修复,大家看看就好.文章后会提供&quo ...

  3. 抓到 Netty 一个隐藏很深的内存泄露 Bug | 详解 Recycler 对象池的精妙设计与实现

    欢迎关注公众号:bin的技术小屋,如果大家在看文章的时候发现图片加载不了,可以到公众号查看原文 本系列Netty源码解析文章基于 4.1.56.Final版本 最近在 Review Netty 代码的 ...

  4. 《AlignedReID:Surpassing Human-Level Performance in Person Re-Identification》理解

  5. 关于cpu体系架构的一些有趣的故事分享

    从排查一次匪夷所思的coredump,引出各种体系架构的差异. 本文中的所有内容来自学习DCC888的学习笔记或者自己理解的整理,如需转载请注明出处.周荣华@燧原科技 1 背景 从全世界有记载的第一台 ...

  6. C++实现ETW进行进程变动监控

    C++实现ETW进行进程变动监控 文章地址:https://www.cnblogs.com/Icys/p/EtwProcess.html 何为Etw ETW(Event Tracing for Win ...

  7. 2022-07-13 第六组 润土 Java01学习笔记

    1.数据类型: 基本数据类型: 整型: byte 字节型 -128-127 1个字节 short 短整型 2个字节 int 整型 4个字节 long 长整型 8个字节 浮点型: float 单精度 4 ...

  8. Solution -「HNOI2013」消毒

    弱化一下,先考虑在二维上解决问题. 题目就转化为:有 \(n\) 个点 \((i, j)\) 需要被覆盖,而我们每次可以选一行或一列去覆盖,求覆盖所有点的最少选择次数. 如果我们对于每一个 \((i, ...

  9. Solution -「CF113D」Museum

    Upd 2021.10.21 更改了状态定义. 记 \(S(u)\) 表示 \(u\) 结点的相邻结点的集合. 又记 \(p(u)\) 表示走到了 \(u\) 且下一步继续留在 \(u\) 结点的概率 ...

  10. rust中的ref

    理解Rust的引用与借用(好文链接) #![feature(core_intrinsics)] fn print_type_of<T>(_: T) { println!("{}& ...