我的表定义
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)
任何帮助都会很棒。
感谢。
答案 0 :(得分:1)
您刚刚显示了与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语句会因此约束而抛出错误。
Kim Berg Hansen早些时候发现了这一点,我只是引用了实际的错误。这被标识为已使用版本12.1.0.2修复。答案 1 :(得分:-1)
通过查看插入部分,to_timestamp的AM正在困扰我。至少取出AM是因为它看起来像http://www.techonthenet.com/oracle/functions/to_timestamp.php,他们不会这样做。所以首先让我们拿出来。也许你也想把FOR改成AS。并且似乎user_valid_time是一个函数,因为它接受了参数,所以我建议找到这个函数并检查它的实现。 &#34; http://docs.oracle.com/cd/B19306_01/server.102/b14200/functions231.htm&#34;