【发布时间】:2013-06-21 14:05:10
【问题描述】:
我只是涉足 Oracle,所以如果这是基本的,请放轻松...我已经广泛搜索了答案,但答案不存在,这是不可能的,或者我的搜索没有使用正确的术语。
无论如何,我正在编写将创建日期维度表的 DDL。我有一个日期键,它是表的主键,我试图将它传播到表中的所有其他列,以在将新值添加到日期时用作这些列的默认值键列。
这是我迄今为止尝试过的一个 sn-p,但给了我错误“ORA-00984: column not allowed here”:
CREATE TABLE DATE_DIM
(
DATE_KEY DATE NOT NULL,
CONSTRAINT DATE_KEY_PK PRIMARY KEY (DATE_KEY),
DAY_NUMBER NUMBER(2) DEFAULT TO_NUMBER(TO_CHAR(DATE_KEY,'DD')),
DAY_NAME VARCHAR(36) DEFAULT TO_CHAR(DATE_KEY,'Day')
)
如果我用SYSDATE 替换DATE_KEY,我不会返回任何错误。但是,假设我正在构思的所有内容都实现了,我将需要插入一个比 sysdate 更具体的日期......为了清楚起见,没有其他列可以更新。
最终,这个想法将扩展到包含具有不同类型数据的其他表,所以如果您想知道为什么我不使用脚本、Excel 等创建一个充满日期的大表,我理解。我只是认为日期维度提供了一个很好的例子来解释我想要实现的目标。
感谢您的帮助。
【问题讨论】:
-
我认为这行不通,但您可能可以使用触发器或使用表的包 api 来完成上述操作。你能多解释一下你打算用这张桌子做什么吗?如果 day_number 和 day_name 列永远不会与 date_key 列中的等价列发生变化,那么我根本不认为需要它们。