一.对于自增序列号的需求,做项目或是写报表的时候,是经常会用到的,所以对于开发来说,就是家常便饭的事情。
- 对于用习惯sqlserver 的开发人员来说,oracle 在生成自增序列号的时候就没有这么方便,这是要单独写个语句来生成。
- 我们接下来看的就是定义一个函数来实现这种功能。
以下是函数方法体
--先定义两个变量
create or replace type numbers_table is table of ytt_num;
create or replace type ytt_num is object
( n number);
--创建函数
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;
最后调用函数
select * from table( ytt_generate_series(1,12,1))
如下图
f_start_num number := 1, 开始数字
f_end_num number, -- 终止数字
f_step_num number := 1 -- 每次以多少数量递增
3. 以上函数是返回一个序列来着,从哪个数字开始,到哪个数字结束,确实是相当方便的。
4.为什么要产生这样的函数呢,可能有的人会问为什么?
5. 那我们假设一种这样的场景,需要列出全表的数据的情况下,从1到10。但是业务表的数据,可能只有,1,3,5,6 这几条数据。
这时候就要出一种虚拟表,来满足1到10的情况下,这样进行左连接的情况下,数据就全部都能出来,只不过,业务表没有的情况下。
这里就是显示空而已。
6. 其实开发中,会经常遇到这种情况,特别是写报表的时候,就会有这样的需求。为此我们要时不时总结起来,将这些有用的函数归纳起来,
方便自己的多次调用。
以上是自己的做为资深开发的一些个人经历,把这些经验分享给大家,希望以后大家在从事开发中,可以避免不必要的麻烦,跟浪费时间精力。
要是大家喜欢我的文章的话,可以在文章下留言或是联系我,共同进步,共同探讨开发的一些案例,促进彼此间的交流,分享一些日常的开发趣事。
- THE END -
最后修改:2024年1月29日
共有 0 条评论