Oracle vs PostgreSQL Develop(19) - PIPE ROW
发表于:2025-02-08 作者:千家信息网编辑
千家信息网最后更新 2025年02月08日,Oracle的PL/SQL提供了Pipelined Table Functions特性用于把多行数据返回到调用者,可以有效的提升性能。在PostgreSQL中,可以通过在函数中利用SETOF或者RET
千家信息网最后更新 2025年02月08日Oracle vs PostgreSQL Develop(19) - PIPE ROW
Oracle的PL/SQL提供了Pipelined Table Functions特性用于把多行数据返回到调用者,可以有效的提升性能。
在PostgreSQL中,可以通过在函数中利用SETOF或者RETURN NEXT来实现。
Oracle
创建数据表,插入数据
TEST-orcl@DESKTOP-V430TU3>drop table t_piperow;drop table t_piperow *ERROR at line 1:ORA-00942: table or view does not existTEST-orcl@DESKTOP-V430TU3>create table t_piperow(id int,c1 timestamp ,c2 varchar2(20),c3 number);Table created.TEST-orcl@DESKTOP-V430TU3>TEST-orcl@DESKTOP-V430TU3>insert into t_piperow(id,c1,c2,c3) 2 select rownum,sysdate,'test'||rownum,123455.55 from dba_objects where rownum <= 500;500 rows created.TEST-orcl@DESKTOP-V430TU3>commit;Commit complete.TEST-orcl@DESKTOP-V430TU3>
创建Type
TEST-orcl@DESKTOP-V430TU3>CREATE OR REPLACE TYPE rec_t_piperow AS OBJECT(id int,c1 timestamp ,c2 varchar2(20),c3 number); 2 /Type created.TEST-orcl@DESKTOP-V430TU3>CREATE OR REPLACE TYPE type_t_piperow AS TABLE OF rec_t_piperow; 2 /Type created.
函数实现
TEST-orcl@DESKTOP-V430TU3>CREATE OR REPLACE FUNCTION func_piperow_demo1 RETURN type_t_piperow PIPELINED IS 2 BEGIN 3 FOR rec in (select * from t_piperow) LOOP 4 PIPE ROW (rec_t_piperow(rec.id,rec.c1,rec.c2,rec.c3)); 5 END LOOP; 6 RETURN; 7 END; 8 /Function created.
查询数据
TEST-orcl@DESKTOP-V430TU3>column c3 format 9999999999999.9999TEST-orcl@DESKTOP-V430TU3>select * from table(func_piperow_demo1()) where rownum < 5; ID C1 C2 C3---------- -------------------- -------------------- ------------------- 1 31-OCT-19 10.50.38.0 test1 123455.5500 00000 AM 2 31-OCT-19 10.50.38.0 test2 123455.5500 00000 AM 3 31-OCT-19 10.50.38.0 test3 123455.5500 00000 AM 4 31-OCT-19 10.50.38.0 test4 123455.5500 00000 AM
PostgreSQL
下面来看看PG的实现,创建表,插入数据
[local]:5432 pg12@testdb=# drop table if exists t_piperow;DROP TABLETime: 5.255 ms[local]:5432 pg12@testdb=# create table t_piperow(id int,c1 timestamp ,c2 varchar(20),c3 float);CREATE TABLETime: 4.711 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=# insert into t_piperow(id,c1,c2,c3) pg12@testdb-# select x,now(),'test'||x,123455.55 from generate_series(1,500) x;INSERT 0 500Time: 10.183 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=#
函数实现
第一种方式,使用SQL:
[local]:5432 pg12@testdb=# CREATE OR REPLACE FUNCTION func_piperow_demo1() RETURNS SETOF PUBLIC.t_piperowpg12@testdb-# ASpg12@testdb-# $$pg12@testdb$# SELECT * FROM t_piperow;pg12@testdb$# $$pg12@testdb-# LANGUAGE SQL;CREATE FUNCTIONTime: 1.341 ms[local]:5432 pg12@testdb=# [local]:5432 pg12@testdb=# select func_piperow_demo1() limit 5; func_piperow_demo1 -------------------------------------------------- (1,"2019-10-31 11:09:27.222996",test1,123455.55) (2,"2019-10-31 11:09:27.222996",test2,123455.55) (3,"2019-10-31 11:09:27.222996",test3,123455.55) (4,"2019-10-31 11:09:27.222996",test4,123455.55) (5,"2019-10-31 11:09:27.222996",test5,123455.55)(5 rows)Time: 1.038 ms[local]:5432 pg12@testdb=#
第二种方式,使用PL/pgSQL,RETURN QUERY
[local]:5432 pg12@testdb=# CREATE OR REPLACE FUNCTION func_piperow_demo2() RETURNS SETOF PUBLIC.t_piperowpg12@testdb-# ASpg12@testdb-# $$pg12@testdb$# BEGINpg12@testdb$# RETURN QUERY SELECT * FROM t_piperow;pg12@testdb$# END;pg12@testdb$# $$pg12@testdb-# LANGUAGE PLPGSQL;CREATE FUNCTIONTime: 3.850 ms[local]:5432 pg12@testdb=# select func_piperow_demo2() limit 5; func_piperow_demo2 -------------------------------------------------- (1,"2019-10-31 11:09:27.222996",test1,123455.55) (2,"2019-10-31 11:09:27.222996",test2,123455.55) (3,"2019-10-31 11:09:27.222996",test3,123455.55) (4,"2019-10-31 11:09:27.222996",test4,123455.55) (5,"2019-10-31 11:09:27.222996",test5,123455.55)(5 rows)Time: 5.645 ms[local]:5432 pg12@testdb=#
第三种方式,使用PL/pgSQL,RETURN NEXT
[local]:5432 pg12@testdb=# select func_piperow_demo3() limit 5; func_piperow_demo3 -------------------------------------------------- (1,"2019-10-31 11:09:27.222996",test1,123455.55) (2,"2019-10-31 11:09:27.222996",test2,123455.55) (3,"2019-10-31 11:09:27.222996",test3,123455.55) (4,"2019-10-31 11:09:27.222996",test4,123455.55) (5,"2019-10-31 11:09:27.222996",test5,123455.55)(5 rows)Time: 5.588 ms[local]:5432 pg12@testdb=#
参考资料
PostgreSQL Oracle 兼容性 之 TABLE、PIPELINED函数
Pipelined in Oracle as well in PostgreSQL
数据
函数
方式
有效
兼容性
参考资料
可以通过
性能
数据表
特性
用者
资料
多行
参考
查询
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
网络技术专业 视频
大华ds s服务器
玩16战区提示服务器中断
银行国家网络安全宣传视频
悠然服务器
服务器安全的系统
云计算跟网络安全哪个好
软件系统与数据库的区别
mysql社区服务器
事业单位网络安全风险点
网络安全工程师心脏
6g网络技术设备产业链
xml连数据库 jsp
海淀国家网络安全产业园核心区
平安证劵软件开发
数据库插入数据 插入变量
r630服务器功率多少
异速联6.4.7服务器
党支部网络安全自查表
漯河市网络安全审查
大型软件开发与管理
公安局开展网络安全教育
国内外重要学术会议论文数据库
网络技术以后做什么
软件开发有啥好项目
游戏软件开发与投放
加强网络建设和网络安全工作
医院网络安全演练记录
新媒体跟软件开发哪个好
青岛市软件开发公司