问题描述
很多时候,在世界各地的生产系统中,需要生成任意数量的行。如果我想100编号的行,我做类似的事情:
我可能会使用这些来生成100日期的列表,通过这样做:
我经常看到用于生成任意数量行的其他技巧,例如笛卡尔将all_objects连接到自身。我想知道Oracle是否曾经考虑过基于where子句的内容神奇地生成行的某种伪表,例如:
提供诸如 “小时”,“秒” 之类的表格走了多远,这取决于为开发人员建模这些东西的重要性; 数字表可以提供大多数/可能的所有需求,只需做一些数学运算 (例如选择0到86399之间的int并将int/86400添加到午夜,以获取代表一天中每秒的86400行)
与创建任意行的其他既定方法 (其中一些感觉真的很脏的黑客) 相比,有这样一个伪表会有任何好处 (性能/资源) 吗?如果考虑实施它,在实施中是否有不可克服或不可行的东西?
SELECT rownum FROM dual CONNECT BY LEVEL <= 100
我可能会使用这些来生成100日期的列表,通过这样做:
SELECT TO_DATE('19700101', 'yyyymmdd') + (rownum -1) FROM dual CONNECT BY LEVEL <= 100我经常看到用于生成任意数量行的其他技巧,例如笛卡尔将all_objects连接到自身。我想知道Oracle是否曾经考虑过基于where子句的内容神奇地生成行的某种伪表,例如:
SELECT integer FROM integers WHERE integer BETWEEN 1 AND 100
--maybe we need dates
SELECT TO_DATE('19700101', 'yyyymmdd') + integer FROM integers WHERE integer BETWEEN 0 AND 99
--maybe a pseudo table could provide dates
SELECT date FROM dates WHERE date BETWEEN SYSDATE - 30 and SYSDATE提供诸如 “小时”,“秒” 之类的表格走了多远,这取决于为开发人员建模这些东西的重要性; 数字表可以提供大多数/可能的所有需求,只需做一些数学运算 (例如选择0到86399之间的int并将int/86400添加到午夜,以获取代表一天中每秒的86400行)
与创建任意行的其他既定方法 (其中一些感觉真的很脏的黑客) 相比,有这样一个伪表会有任何好处 (性能/资源) 吗?如果考虑实施它,在实施中是否有不可克服或不可行的东西?
专家解答
我不知道是否曾经计划实现 “整数” 伪表。
但是考虑到有多少选择可以做到这一点,我对此表示怀疑。例如,您可以使用XMLTable。这接近你所要求的:
而且还有很多其他的方法,例如model、recursive was等。所以我真的看不到像这样制作伪表的必要性。
而且,如果您想在生产代码中加入这种数据,通常最好创建一个真实的表。尤其是约会。
人们经常使用日期生成器来做诸如 “查找下一个工作日” 之类的事情。但是 “营业日” 不是一个固定的概念。它因国家/地区和年份而异,具体取决于公共假期的秋季和其他事件。这可能会使维护日期生成器SQL变得困难。最好有一个带有is_business_day标志的真实表。然后你可以有一个应用程序,让你的用户定义这个东西;)
但是考虑到有多少选择可以做到这一点,我对此表示怀疑。例如,您可以使用XMLTable。这接近你所要求的:
select column_value
from xmltable('1 to 5');
Result Sequence
--------------------------------------------------------------------------------
1
2
3
4
5
select column_value
from xmltable('3 to 6');
Result Sequence
--------------------------------------------------------------------------------
3
4
5
6而且还有很多其他的方法,例如model、recursive was等。所以我真的看不到像这样制作伪表的必要性。
而且,如果您想在生产代码中加入这种数据,通常最好创建一个真实的表。尤其是约会。
人们经常使用日期生成器来做诸如 “查找下一个工作日” 之类的事情。但是 “营业日” 不是一个固定的概念。它因国家/地区和年份而异,具体取决于公共假期的秋季和其他事件。这可能会使维护日期生成器SQL变得困难。最好有一个带有is_business_day标志的真实表。然后你可以有一个应用程序,让你的用户定义这个东西;)
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




