2

我的表定义

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)

任何帮助都会很棒。

谢谢。

4

2 回答 2

1

您刚刚展示了与 Oracle 12c 的时间有效性功能相关的已知错误的变体,错误 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 中修复。

于 2014-09-18T20:01:54.783 回答
-1

仅通过查看插入部分, 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

于 2014-09-18T18:29:32.260 回答