大规模插入sql-Oracle 11g

大规模插入sql-Oracle 11g,sql,oracle,datetime,Sql,Oracle,Datetime,我需要一个查询,以便在从今天开始的最后N天内将行插入表中 Insert into Table select 'xpto', name from users where login_date between TO_DATE(:DATE || ' 00:00:00', 'mm/dd/yyyy HH24:MI:SS') and TO_DATE(:DATE || ' 23:59:59', 'mm/dd/yyyy HH24:MI:SS') 我需要这个:最后30天代表的日期。。。每天。。 因

我需要一个查询,以便在从今天开始的最后N天内将行插入表中

Insert into Table select 'xpto', name 
from users where login_date between 
    TO_DATE(:DATE || ' 00:00:00', 'mm/dd/yyyy HH24:MI:SS') 
and TO_DATE(:DATE || ' 23:59:59', 'mm/dd/yyyy HH24:MI:SS')
我需要这个:最后30天代表的日期。。。每天。。 因此,这将是30个插入

我该怎么做

编辑

假设我想插入过去30天的数据。。。因此,我们:

01/18/2016
01/19/2016
01/20/2016
...
02/01/2016
02/02/2016
02/03/2016
....
02/15/2016
....
02/22/2016
我需要一个查询或语句,以插入基于上述每一天的数据,如下所示:

Insert into Table select 'xpto', name 
from users where login_date between 
    TO_DATE('01/15/2016' || ' 00:00:00', 'mm/dd/yyyy HH24:MI:SS') 
and TO_DATE('01/15/2016' || ' 23:59:59', 'mm/dd/yyyy HH24:MI:SS')
--- another insert
Insert into Table select 'xpto', name 
from users where login_date between 
    TO_DATE('01/16/2016' || ' 00:00:00', 'mm/dd/yyyy HH24:MI:SS') 
and TO_DATE('01/16/2016' || ' 23:59:59', 'mm/dd/yyyy HH24:MI:SS')
我不想每天做一个查询

另一次编辑

很抱歉,我刚把我的工作笔记本拿到这里……这是真实的样本:

BEGIN
for day in (SELECT to_char(TO_DATE (SYSDATE, 'dd/mm/yyyy')-30 + LEVEL) AS DATE_CHECK
      FROM DUAL
CONNECT BY SYSDATE - 30 + LEVEL <= SYSDATE)
  LOOP
  v_date := to_char(day.date_check);
  INSERT INTO resume (date_check, type, total)
SELECT   v_data AS DATA, type, COUNT (*) total
    FROM ( select ....
 from table
 WHERE DATE_COLUMN BETWEEN TO_DATE(v_data ||' 00:00:00', 'dd/mm/yyyy hh24:mi:ss') and TO_DATE(v_date || ' 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
union 
select ....
 from table
 WHERE DATE_COLUMN BETWEEN TO_DATE(v_data ||' 00:00:00', 'dd/mm/yyyy hh24:mi:ss') and TO_DATE(v_date || ' 23:59:59', 'dd/mm/yyyy hh24:mi:ss')
)

end loop;
end;
但它不起作用。。。如果我手动将v_日期替换为2016年2月14日的任何日期,则可以使用相同的插入操作


如果我理解您试图正确执行的操作,以下内容可能有用:

Insert into Table
  select 'xpto', name 
    from users
    where login_date between TRUNC(SYSDATE) - INTERVAL '30' DAY
                         and TRUNC(SYSDATE) + INTERVAL '1' DAY - INTERVAL '1' SECOND
编辑 根据对问题的编辑,我们似乎可以扩大范围,如下所示:

Insert into Table
  select 'xpto', name 
    from users
    where login_date between TO_DATE('01/18/2016', 'MM/DD/YYYY') 
                         and TO_DATE('02/22/2016', 'MM/DD/YYYY') + INTERVAL '1' DAY - INTERVAL '1' SECOND
第二次编辑 谢谢你的澄清。或许以下几点会有所帮助:

BEGIN
  for day in (SELECT TRUNC(SYSDATE)-30 + LEVEL AS DATE_CHECK
                FROM DUAL
                CONNECT BY TRUNC(SYSDATE) - 30 + LEVEL <= TRUNC(SYSDATE))
  LOOP
    INSERT INTO resume (date_check, type, total)
      SELECT day.DATE_CHECK AS DATA, type, COUNT (*) total
        FROM (select ....
                from table
                WHERE DATE_COLUMN = TRUNC(day.DATE_CHECK));
  end loop;
end;

祝你好运。

如果我理解你的正确做法,以下几点可能有用:

Insert into Table
  select 'xpto', name 
    from users
    where login_date between TRUNC(SYSDATE) - INTERVAL '30' DAY
                         and TRUNC(SYSDATE) + INTERVAL '1' DAY - INTERVAL '1' SECOND
编辑 根据对问题的编辑,我们似乎可以扩大范围,如下所示:

Insert into Table
  select 'xpto', name 
    from users
    where login_date between TO_DATE('01/18/2016', 'MM/DD/YYYY') 
                         and TO_DATE('02/22/2016', 'MM/DD/YYYY') + INTERVAL '1' DAY - INTERVAL '1' SECOND
第二次编辑 谢谢你的澄清。或许以下几点会有所帮助:

BEGIN
  for day in (SELECT TRUNC(SYSDATE)-30 + LEVEL AS DATE_CHECK
                FROM DUAL
                CONNECT BY TRUNC(SYSDATE) - 30 + LEVEL <= TRUNC(SYSDATE))
  LOOP
    INSERT INTO resume (date_check, type, total)
      SELECT day.DATE_CHECK AS DATA, type, COUNT (*) total
        FROM (select ....
                from table
                WHERE DATE_COLUMN = TRUNC(day.DATE_CHECK));
  end loop;
end;


祝你好运。

这将是一次插入,但行数未知。也许30岁。那不是很大。无论如何,您可以使用sysdate-30和sysdate之间的值来完成所需的操作。。我需要在至少2年内拔牙。。。所以我必须做一个大的插入查询。。。而且它不在sysdate-30和sysdate之间。。这更像是一个循环。。对于过去X天中的每一天,获取日期和过滤器..到目前为止,我没有看到任何循环要求。您需要解释“在过去X天中的每一天,获取日期和过滤器”的含义。标准“中间人”在什么方面不适用于您?也许发布示例数据您是否尝试为每个用户插入许多行?另一个编辑人员。。。。。我想我传递了一个错误的想法…很抱歉,这将是一个具有未知行数的插入。也许30岁。那不是很大。无论如何,您可以使用sysdate-30和sysdate之间的值来完成所需的操作。。我需要在至少2年内拔牙。。。所以我必须做一个大的插入查询。。。而且它不在sysdate-30和sysdate之间。。这更像是一个循环。。对于过去X天中的每一天,获取日期和过滤器..到目前为止,我没有看到任何循环要求。您需要解释“在过去X天中的每一天,获取日期和过滤器”的含义。标准“中间人”在什么方面不适用于您?也许发布示例数据您是否尝试为每个用户插入许多行?另一个编辑人员。。。。。我想我传递了错误的想法…对不起,我只是用更好的解释编辑了这个问题,鲍勃。。。你能看一下吗添加了第二个示例-尽管第一个示例不需要每次运行查询时都进行编辑。祝你好运。如果我需要插入循环的每天mm/dd/yyyy怎么办?如果我了解你的要求,我看不出有任何循环的需要。在我看来,您有一个开始日期和一个结束日期,并且需要所有登录日期在开始和结束值之间的数据。此外,在SQL中没有循环构造—所有操作都是通过生成一组数据并对该数据集进行操作来完成的。如果您使用的是PL/SQL Oracle语言,可以将其视为Ada和嵌入式SQL,那么您可以使用循环—但在纯SQL中,用传统编程术语来说,既不需要也没有编写循环代码的方法。您已经说过两次“不工作”。第三次被闪电击中。请解释结果,而不是说“正在工作”。基于这个问题中的所有文本,我仍然不明白为什么30天的区间不能达到你的预期。我看到的一个区别是,因为你有一个工会,它在两天之间选择不同的记录。。。你能看一下吗添加了第二个示例-尽管第一个示例不需要每次运行查询时都进行编辑。祝你好运。如果我需要插入循环的每天mm/dd/yyyy怎么办?如果我了解你的要求,我看不出有任何循环的需要。在我看来,您有一个开始日期和一个结束日期,并且需要所有登录日期在开始和结束值之间的数据。此外,在SQL中没有循环构造—所有操作都是通过生成一组数据并对该数据集进行操作来完成的。如果您使用的是PL/SQL Oracle语言,可以将其视为Ada和嵌入式SQL,那么您可以使用循环—但在纯SQL中,用传统编程术语来说,既不需要也没有编写循环代码的方法。您已经说过两次“不工作”。第三次被闪电击中。请解释结果,而不是说“正在工作”。根据这个问题的所有文本,我仍然看不到w 30天的间隔不会达到你的预期。我看到的一个区别是,因为你有一个工会,它在两天之间选择不同的记录。