检查约束违反时间
我的表定义检查约束违反时间
CREATE TABLE PROVISION_HIST
(
card_nbr number(9) primary key,
provision_loc_cd varchar2(2),
start_ts timestamp(6),
end_ts timestamp(6),
last_updt_ts timestamp(6),
provision_meta_data xmltype,
unprovision_meta_data xmltype,
PERIOD FOR user_valid_time (start_ts, end_ts)
)
PARTITION BY RANGE (end_ts)
(
PARTITION PROVISION_HIST_P0 VALUES LESS THAN (TO_DATE('10-01-2014', 'MM-DD-YYYY')),
PARTITION PROVISION_HIST_P1 VALUES LESS THAN (TO_DATE('11-01-2014', 'MM-DD-YYYY')),
PARTITION PROVISION_HIST_P2 VALUES LESS THAN (TO_DATE('12-01-2014', 'MM-DD-YYYY')),
PARTITION PROVISION_HIST_P3 VALUES LESS THAN (TO_DATE('01-01-2015', 'MM-DD-YYYY'))
);
CREATE UNIQUE INDEX provision_hist_pk
ON PROVISION_HIST (card_nbr, provision_loc_cd, start_ts);
我只需要插入一些虚拟数据进行测试。 所以我用
INSERT INTO provision_hist (CARD_NBR,PROVISION_LOC_CD, START_TS,END_TS,LAST_UPDT_TS,PROVISION_META_DATA,UNPROVISION_META_DATA)
VALUES (4444,'lx',to_timestamp('03/18/2012 02:35 AM', 'MM/DD/YYYY HH:MI AM'),to_timestamp('12/01/2014 02:35 AM', 'MM/DD/YYYY HH:MI AM'),current_timestamp(6),'<Warehouse whono="200"><Building>Leased</Building> </Warehouse>','<Warehouse whono="200"> <Building>Leased</Building> </Warehouse>'
);
ORA-02290:检查约束(USER_VALID_TIME793C79)违反
任何帮助将是巨大的。
谢谢。
您刚刚显示了与Oracle 12c的temporal validity功能Bug 18195286 : ORA-2290 ON INSERT INTO TABLE WITH TEMPORAL VALIDITY相关的已知错误的变体。
具体地,当一个改变或创建具有PERIOD FOR
子句的表,将创建一个约束来验证所选日期期间:
PERIOD FOR user_valid_time (start_ts, end_ts)
产生的约束可以通过查询USER_CONSTRAINTS显示。它会显示这样的:在约束
SELECT search_condition
FROM user_constraints
WHERE table_name = 'PROVISION_HIST'
结果:
(start_ts < end_ts) and (VALID > 0)
INSERT语句中抛出这一限制的错误。
金伯格汉森先前确定了这一点,我只是列举了实际的错误。这被确定为在版本12.1.0.2中修复。
这就是我正在考虑的错误,是的。我的问题是,虚拟无形列“VALID”在我的环境中始终具有负值。 – 2014-09-19 06:05:32
仅仅通过查看插入部分,to_timestamp的AM正在困扰着我。至少拿出AM是因为它看起来像http://www.techonthenet.com/oracle/functions/to_timestamp.php,他们不这样做。所以先让我们看看。也许你也想把FOR改成AS。看起来user_valid_time是一个函数,因为它需要的参数,所以我会建议找到这个函数并检查它的实现。 “http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions231.htm”
是user_valid_time的一个函数吗? – Rika 2014-09-18 17:09:21
@Rika它看起来只是用户定义的期限数据类型名称给我。 – user2711819 2014-09-18 17:12:37
也是这个Oracle或SQL? – Rika 2014-09-18 18:30:38