我有一个程序,我们将最后365天作为日期从X开始插入表格。
目前,该过程使用LOOP [365次迭代]并在365 DML语句中插入数据。
根据我的理解,使用连接循环并一次插入所有内容在性能方面将是更好的选择。
请在下面找到我的查询,其中X = 2017年9月30日:
insert into Temp_Table_X as
select (To_Date('30-SEP-2017','DD-MON-RRRR')+1) - rownum
from dual
connect by rownum <= 365
请告知。
答案 0 :(得分:2)
SQL语句比PL / SQL循环更快。但对于365行,差异几乎不值得担心。除非你运行这个语句很多,否则肯定会使用SQL。
顺便提一下,您已经硬编码365
。闰年怎么样?也许这种变化会更好?
insert into Temp_Table_X
with x as ( select date '2017-01-31' as st from dual )
select x.st - (level -1)
from x
connect by x.st - level >= add_months(x.st, -12)
/
&#34;为什么使用&#34; x为&#34;而不是在from子句中使用子查询?&#34;
没理由。他们是等同的,所以请使用适合自己风格的任何一种。