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

一、Oracle pipelined 使用例子

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

create or replace function func_pipeline_test return varchar_type
pipelined as
begin
for i in 1..5 loop
pipe row('Pipeline '||i||' '||systimestamp);
dbms_lock.sleep(1);
end loop;
return;
end;
/ SQL> select * from table(func_pipeline_test); COLUMN_VALUE
--------------------------------------------------------------------------------
Pipeline 1 01-JUL-21 07.22.21.630651000 PM +08:00
Pipeline 2 01-JUL-21 07.22.22.630975000 PM +08:00
Pipeline 3 01-JUL-21 07.22.23.631054000 PM +08:00
Pipeline 4 01-JUL-21 07.22.24.631381000 PM +08:00
Pipeline 5 01-JUL-21 07.22.25.631216000 PM +08:00

二、KingbaseES

1、pipelined

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

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

create or replace function func_pipeline_test return varchar_type
pipelined as
begin
for i in 1..5 loop
pipe row('Pipeline '||i||' '||systimestamp);
perform pg_sleep(1);
end loop;
return;
end;
/ test=# select * from table(func_pipeline_test());
column_value
------------------------------------------
Pipeline 1 2021-12-22 15:26:45.572780+08
Pipeline 2 2021-12-22 15:26:45.572780+08
Pipeline 3 2021-12-22 15:26:45.572780+08
Pipeline 4 2021-12-22 15:26:45.572780+08
Pipeline 5 2021-12-22 15:26:45.572780+08
(5 rows)

2、setof 使用例子

create or replace function func_pipeline_test1 returns setof text as
declare
v_text text;
begin
for i in 1..5 loop
return query select 'Pipeline '||i||' '||clock_timestamp() ;
perform sys_sleep(1);
end loop;
return;
end
/ test=# select func_pipeline_test1();
func_pipeline_test1
------------------------------------------
Pipeline 1 2021-09-13 17:36:55.571164+08
Pipeline 2 2021-09-13 17:36:56.572743+08
Pipeline 3 2021-09-13 17:36:57.574097+08
Pipeline 4 2021-09-13 17:36:58.575511+08
Pipeline 5 2021-09-13 17:36:59.577169+08 (5 rows) create or replace function func_pipeline_test2 returns setof t1 as
declare
v_t1 t1%rowtype;
begin
for v_t1 in (select * from t1) loop
return next v_t1;
end loop;
return;
end
/

test=# select * from func_pipeline_test2();
id | name
----+------
1 | abc
2 | abc
3 | abc
4 | abc
5 | abc
6 | abc
7 | abc
8 | abc
9 | abc
10 | abc
(10 rows)

3、table function

create or replace type int_set as table of integer;

create or replace function func1() return int_set as
v_temp int_set := int_set(1,2,3);
begin
return v_temp;
end; test=# select func1();
func1
----------------
int_set(1,2,3)
(1 row) test=# select * from table(func1());
column_value
--------------
1
2
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. Python:27行代码实现将多个Excel表格内容批量汇总合并到一个表格

    序言 (https://jq.qq.com/?_wv=1027&k=GmeRhIX0) 老板最近越来越过分了,快下班了发给我几百个表格让我把内容合并到一个表格内去.还好我会Python,分分钟 ...

  2. 避坑手册 | JAVA编码中容易踩坑的十大陷阱

    JAVA编码中存在一些容易被人忽视的陷阱,稍不留神可能就会跌落其中,给项目的稳定运行埋下隐患.此外,这些陷阱也是面试的时候面试官比较喜欢问的问题. 本文对这些陷阱进行了统一的整理,让你知道应该如何避免 ...

  3. c# 通过反射,字符串 转换 类

    eg:已经知道字符串 "userInfo"是一个表名,并且在代码中也有自己的userInfo类,如何把这个字符串"userInfo" 转换成类, "u ...

  4. NC16597 [NOIP2011]聪明的质监员

    NC16597 [NOIP2011]聪明的质监员 题目 题目描述 小T 是一名质量监督员,最近负责检验一批矿产的质量.这批矿产共有 \(n\) 个矿石,从 \(1\) 到 \(n\) 逐一编号,每个矿 ...

  5. NC53681 「土」巨石滚滚

    NC53681 「土」巨石滚滚 题目 题目描述 帕秋莉掌握了一种土属性魔法 她使用这种魔法建造了一个大型的土球,并让其一路向下去冲撞障碍 土球有一个稳定性 \(x\) ,如果 \(x < 0\) ...

  6. React key究竟有什么作用?深入源码不背概念,五个问题刷新你对于key的认知

    壹 ❀ 引 我在[react]什么是fiber?fiber解决了什么问题?从源码角度深入了解fiber运行机制与diff执行一文中介绍了react对于fiber处理的协调与提交两个阶段,而在介绍协调时 ...

  7. 基于Python+Sqlite3实现最简单的CRUD

    一.基本描述 使用Python,熟悉sqlite3的基本操作(查插删改),以及基本数据类型.事务(ACID).     准备工作:在sqlite3的官网上下载预编译的sqlite文件(windows) ...

  8. PoweJob高级特性-MapReduce完整示例

    由于网上搜索 PowerJob MapReduce 都是设计原理,demo也展示个空壳子,没有演示Map到Reduce结果怎么传递,对于没有MR开发经验的人来说并没有什么帮助,所以这里写了一个有完整计 ...

  9. for增强

    package study5ran2yl.study; public class ForDemo02 { public static void main(String[] args) { int[] ...

  10. C++类中的常成员和静态成员

    常变量.常对象.常引用.指向常对象或常变量的指针等在定义时都使用了const关键字,这是C++语言引入的一种数据保护机制,称为const数据保护机制.例如通过const关键字主动地将被调函数形参进行限 ...