Oracle实现POSTGRESQL的generate_series功能

PostgreSQL 有生成序列的函数,能够方便的进行造数据。这里我用ORACLE实现了PGSQL的generate_series函数功能。
POSTGRESQL.

t_girl=# select * from generate_series(1,10);
 generate_series
-----------------
               1
               2
               3
               4
               5
               6
               7
               8
               9
              10
(10 行记录)

时间:1.290 ms
t_girl=# select * from generate_series(1,10,2);
 generate_series
-----------------
               1
               3
               5
               7
               9
(5 行记录)

时间:0.431 ms
t_girl=# select * from generate_series(1,10,3);
 generate_series
-----------------
               1
               4
               7
              10
(4 行记录)

时间:0.879 ms
t_girl=# select * from generate_series(2,10,3);
 generate_series
-----------------
               2
               5
               8
(3 行记录)

时间:0.867 ms

t_girl=# select count(*) from generate_series(1,1000);
 count
-------
  1000
(1 行记录)

时间:1.142 ms

t_girl=# select to_char(now() - ‘1 day‘::interval * n,‘YYYY-MM-DD‘) as result from generate_series(1,10)  g(n);
   result
------------
 2015-12-08
 2015-12-07
 2015-12-06
 2015-12-05
 2015-12-04
 2015-12-03
 2015-12-02
 2015-12-01
 2015-11-30
 2015-11-29
(10 行记录)

时间:17.284 ms

ORACLE:

12:10:34 SQL> select * from table(ytt_generate_series(1,10));

COLUMN_VALUE
------------
           1
           2
           3
           4
           5
           6
           7
           8
           9
          10                                                                    

已选择 10 行。

已用时间:  00: 00: 00.02
12:10:36 SQL> select * from table(ytt_generate_series(1,10,2));

COLUMN_VALUE
------------
           1
           3
           5
           7
           9                                                                    

已用时间:  00: 00: 00.00
12:10:54 SQL> select * from table(ytt_generate_series(1,10,3));

COLUMN_VALUE
------------
           1
           4
           7
          10                                                                    

已用时间:  00: 00: 00.00
12:10:56 SQL> select * from table(ytt_generate_series(2,10,3));

COLUMN_VALUE
------------
           2
           5
           8                                                                    

已用时间:  00: 00: 00.02
12:11:04 SQL> select count(*) from table(ytt_generate_series(1,1000));

  COUNT(*)
----------
      1000                                                                      

已用时间:  00: 00: 00.13

13:32:13 SQL> select to_char(sysdate - n,‘YYYY-MM-DD‘) from table(ytt_generate_series(1,10));

TO_CHAR(SY
----------
2015-12-08
2015-12-07
2015-12-06
2015-12-05
2015-12-04
2015-12-03
2015-12-02
2015-12-01
2015-11-30
2015-11-29

已选择 10 行。

已用时间:  00: 00: 00.01

附上代码:

-- Declare result set.
create or replace type ytt_num is object
( n number);
/
create or replace type numbers_table is table of ytt_num;
/
-- Function body.
-- Created by ytt.
-- 2015/12/9
create or replace function ytt_generate_series
(
f_start_num number := 1, -- Start number.
f_end_num number,  -- Finish number.
f_step_num number := 1 -- Step.
)
return numbers_table pipelined
is
  list numbers_table := numbers_table();
  i number := 0;
  j number := 1;
begin
  i := f_start_num;
  j := 1;
  -- Increase nested table‘s size.
  list.extend(f_end_num);
  -- Loop begin.
  while i <= f_end_num loop
  -- Initlization.
    list(j) := ytt_num(null);
    list(j).n := i;
    pipe row(list(j));
    i := i + f_step_num;
    j := j + 1;
  end loop;
  return;
end;
/
时间: 2025-01-12 20:17:40

Oracle实现POSTGRESQL的generate_series功能的相关文章

MySQL,Oracle,PostgreSQL 数据库web维护管理软件

TreeSoft数据库管理系统使用JAVA开发,采用稳定通用的springMVC +JDBC架构,实现基于WEB方式对 MySQL,Oracle,PostgreSQL 等数据库进行维护管理操作. 功能包括:数据库的展示,库表的展示,表字段结构的展示, SQL语句的在线编辑批量执行,表结构的在线设计维护,数据的在线编辑维护,查询语句保存,JSON数据格式化,SQL语法帮助,在线数据源选择配置等.系统内置14套UI皮肤,45套代码编辑区UI方案,使用中可以依个人喜好选择配色方案. 本系统不但稳定,实

MySQL,Oracle,PostgreSQL通过web方式管理维护, 提高开发及运维效率

在开发及项目运维中,对数据库的操作大家目前都是使用客户端工具进行操作,例如MySQL的客户端工具navicat,Oracle的客户端工具 PL/SQL Developer, MSSQL的客户端工具查询分析器等.目前大家使用的大都是C/S单机版的客户端工具,要连数据库的电脑都要安装客户端工具, navicat还比较好安装,而Oracle客户端工具安装就比较麻烦了. 当对远程服务器的数据库进行访问管理时,特别是Linux服务器,都要开启相应端口,这样也增加了服务器的安全隐患,增加了工作量. 如果有基

【转帖】从 Oracle 到 PostgreSQL ,某保险公司迁移实践 技术实践

从 Oracle 到 PostgreSQL ,某保险公司迁移实践 http://www.itpub.net/2019/11/08/4108/ 信泰人寿保险股份有限公司 摘要:去O一直是金融保险行业永恒的话题,但去O的难度之大也只有真正经历过的人才知其中的艰辛.此次笔者结合实际去O工作,对去O过程中碰到的DBLINK.SEQUENCE最大值.空串.SQL语句中的别名等等近50个问题进行探讨,绝对是干货满满,诚意十足! 章晨曦(某保险公司技术经理) Oracle ACE-A,Oracle 10g O

Oracle 11gR2数据库闪回功能--预防人为逻辑错误

Oracle 11gR2数据库闪回功能--预防人为逻辑错误 1.Flashback对于DJI ERP系统的作用? 对于一些人为操作的错误,比如批量删除了数据,我们可以通过Flashback功能来恢复.缺点是,此段时间内其他用户的正确操作也会丢失. a.设立一个闪回窗口,例如60分钟.当出现人为错误时,可以恢复到过去60分钟内的任何一个时间点. b.以某个时刻设定一个恢复点,以后出问题了,那怕过了几个月,都可以恢复到这个时刻上来.而且,只能恢复到这个时刻,而不能是这几个月内的任何一个时间点. 我们

【小计】PostgreSQL实现Oracle的trunc日期函数功能

create or replace function trunc(p_timestamp timestamp with time zone, p_formart varchar default 'DD')  returns timestamp without time zone as $$ declare  v_timestamp timestamp := null;  v_formart varchar(10) := upper(p_formart); begin  /*  * 函数功能:对日

通过EDB-Mtk工具从Oracle向PostgreSQL迁移数据

一. 参考资料 postgresql-10-US.pdf Postgres_Plus_Migration_Guide.pdf www.postgresql.org www.enterprisedb.com *由于技术更新很快,请注意本文的时效性. 二. 环境说明 源数据库:Oracle 12cR2下的一个pdb,服务名aegisdb 目标数据库:postgresql-10.1 三. 准备迁移工具 工具名称: EDB Migration Toolkit(EDB MTK) EDB MTK可以通过Po

配置Goldengate从Oracle到PostgreSQL的同步复制

1.平台环境 Oracle:rhel6.7+Oracle11.2.0.4  ip:192.168.56.2 PostgreSQL:rhel7.2+Pg9.6.1  ip:192.168.56.25 Goldengate:Goldengate12.2.0.1 for oracle和Goldengate 12.2.0.1 for PostgreSQL 2.Ogg配置 Oracle端: 直接安装goldengate for oracle 11g 配置环境变量 [[email protected] og

web项目总结——通过jsp+servlet实现对oracle的增删改查功能

1.DAO模式 分包:依次建立 entity:实体包,放的是跟oracle数据库中表结构相对应的对象的属性,也就是这个对象有什么 dao:增删改查接口,实现增删改查的具体方法 service:同dao,也是一个接口,一个接口的实现类,方法什么的都跟dao差不多 servlet:新建servlet类,继承HttpServlet类,一个方法建立一个servlet类,根据不同的方法选择使用doGet().doPost()方法 .services()既包含doGet 又包含doPost 新建jsp页面

oracle和postgresql 递归查询父子关系记录语法区别

oracle: 一.数据 db数据字段如下: task_id             task_name         t.parent_task_id       *** ***                     ***                          ***                               *** 000001            t1                         ***