【问题标题】:How to insert records in table for every month如何在表中插入每个月的记录
【发布时间】:2019-12-26 09:45:13
【问题描述】:

我已经为每个月创建了表格,例如 TBL_ABC_JANTBL_ABC_FEB、...。TBL_ABC_DEC。我创建了 1 个存储过程,每个月将记录插入表中。所以我使用动态SQL插入记录,但不知道如何将记录插入到上面提到的每个月的表中。请你帮我告诉我这些插入背后的逻辑。插入将自动完成,因为它是一个存储过程。

【问题讨论】:

  • insert select ...您的真正问题是什么..尝试添加数据样本和预期结果
  • 这种方法很可能是错误。应该有一个包含 DATE 列的表。即使您解决了当前问题(“如何插入...”),当您必须从其中一些表中选择行时,您也会遇到另一个问题。您是否会编写 12 个看起来完全相同相同但源表名称不同的查询?无论您做什么,无论何时,您都会因为错误的数据模型而遇到问题。我建议您重新考虑它并最终放弃它。
  • @Littlefoot 感谢您给我的建议。表中已提到 DATE 列。所以每个月我都要写 12 insert 声明每个月或其他任何东西,以便我可以申请。
  • 正确的解决办法是公用一张桌子,而不是一个月一张。

标签: sql oracle stored-procedures dynamic plsql


【解决方案1】:

您应该考虑只创建一个包含月份列的表。

【讨论】:

    【解决方案2】:

    如果你真的需要这样的设计,那么你可以使用INSERT FIRST

    INSERT FIRST
      WHEN to_char(DATE_COL,'MON') = 'JAN' THEN
        INTO TBL_ABC_JAN VALUES(....)
    WHEN to_char(DATE_COL,'MON') = 'FEB' THEN
        INTO TBL_ABC_FEB VALUES(....)
    ..
    ..
    ..
    WHEN to_char(DATE_COL,'MON') = 'NOV' THEN
    INTO TBL_ABC_NOV VALUES(....)
    ELSE
    INTO TBL_ABC_DEC VALUES(....) 
    SELECT DATE_COL, ......
    FROM   source_table;
    

    干杯!!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-02-04
      • 2012-08-29
      • 1970-01-01
      • 2014-08-06
      相关资源
      最近更新 更多