设为首页 收藏本站
查看: 877|回复: 0

[经验分享] Oracle实现PGSQL的generate_series

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-12-10 09:14:35 | 显示全部楼层 |阅读模式
PostgreSQL 有生成序列的函数,可以方便的进行造数据。这里我用ORACLE实现了PGSQL的generate_series函数功能。
POSTGRESQL.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
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:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
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





附上代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
-- 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;
/






运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-149050-1-1.html 上篇帖子: Oracle 12c ORA-01516: nonexistent log file, data file, or temporary file "1 下篇帖子: oracle导出报EXP-00091: Exporting questionable statistics. Oracle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表