Trafodion 生成序列UDF

本文介绍了不同关系型数据库中生成序列的方法,包括PostgreSQL的generate_series函数、Oracle的connectby函数及Trafodion的手动创建TMUDF实现。此外,还提供了生成指定范围序列和当月所有日期的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

不同的关系型数据库有不同的方式可以用来生成一个序列,
PostgreSQL使用generate_series函数,可参考https://www.postgresql.org/docs/9.1/static/functions-srf.html
例如,

SELECT * FROM generate_series(2,4);
 generate_series
-----------------
               2
               3
               4
(3 rows)

SELECT * FROM generate_series(5,1,-2);
 generate_series
-----------------
               5
               3
               1
(3 rows)

Oracle使用connect by函数,可参考http://www.oradev.com/connect_by.html
例如,

select level from dual connect by level<=10;

Trafodion在后续新版本中提供series() UDF来实现类似的功能,在此之前,我们也可以通过手动创建相应的TMUDF来实现。方法如下,

  1. 准备libseries.so并分发到每个trafodion节点
cp libseries.so /opt/trafodion/
chown trafodion.trafodion libseries.so 
pdcp $MY_NODES libseries.so $PWD
  1. 创建类库
create library series file '/opt/trafodion/libseries.so';
  1. 创建TMUDF
create table_mapping function series() external name 'SERIES' language cpp library series;
  1. 测试TMUDF功能
//生成1~10的序列
>>select element from udf(series(1,10)); 

ELEMENT              
-------------------- 
                   1 

                   2 

                   3 

                   4 

                   5 

                   6 

                   7 

                   8 

                   9 

                  10 


--- 10 row(s) selected. 
//生成当月所有日期
>>select cast(date_trunc('MONTH',sysdate) as date) + element days from udf(series(0,cast(cast(dateadd(day,-1,date_trunc('MONTH',add_months(sysdate,1))) as date) - cast(date_trunc('MONTH',sysdate) as date) as int))); 

DAYS       
---------- 
2018-09-01 

2018-09-02 

2018-09-03 

2018-09-04 

2018-09-05 

2018-09-06 

2018-09-07 

2018-09-08 

2018-09-09 

2018-09-10 

2018-09-11 

2018-09-12 

2018-09-13 

2018-09-14 

2018-09-15 

2018-09-16 

2018-09-17 

2018-09-18 

2018-09-19 

2018-09-20 

2018-09-21 

2018-09-22 

2018-09-23 

2018-09-24 

2018-09-25 

2018-09-26 

2018-09-27 

2018-09-28 

2018-09-29 

2018-09-30 

--- 30 row(s) selected. 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值