Oracle 中的表将每月存储服务器数量

问题描述 投票:0回答:1

我必须在 Oracle 中创建一个类似的表,如下所示。正如您所看到的,月份和年份被合并,然后根据描述类型存储每月服务器计数数据。为了获取数据,我使用 Oracle。月份和年份栏目仍在继续。还需要为每个月安排此作业,以便 MonthYear 列自动添加到表中,并且定期存储该值。欢迎任何建议。

oracle oracle11g oracle10g
1个回答
0
投票

在 SQL(不仅仅是 Oracle)中,表具有固定数量的列。当您考虑每月添加一个新列的解决方案时,您正在尝试以非 SQL 方式执行某些操作。

每个月没有列。转置表格,使

month
成为单列,当您想要添加新月份的数据时,您可以插入新行。这比添加更多列简单得多。

类似:

CREATE TABLE table_name (
  month DATE
        CONSTRAINT table_name__month__pk PRIMARY KEY
        CONSTRAINT table_name__month__chk CHECK (month = TRUNC(month, 'MM')),
  server_count_start NUMBER(10,0) NOT NULL,
  new_servers        NUMBER(10,0) DEFAULT 0 NOT NULL,
  m_and_a_addition   NUMBER(10,0) DEFAULT 0 NOT NULL,
  moved_to_cloud     NUMBER(10,0) DEFAULT 0 NOT NULL,
  decomissioned      NUMBER(10,0) DEFAULT 0 NOT NULL
);

注意:不要存储月末总计,因为您可以使用

server_start_count + new_servers _ m_and_a_addition - moved_to_cloud - decomissioned
进行计算。如果您使用的是 Oracle 12,那么您可以添加一列并使用
GENERATED ALWAYS AS (server_start_count + new_servers _ m_and_a_addition - moved_to_cloud - decomissioned)
,但您使用的是非常旧的 Oracle 版本,并且不受支持(请升级)。

如果您想使用月份作为列来显示输出,那么您可以在SQL中或在您用来访问数据的任何第三方应用程序中

PIVOT
表。但为了存储数据,请添加行,而不是列。

© www.soinside.com 2019 - 2024. All rights reserved.