0

TARGET_TABLE在with 下面的语句中插入值时INSERT..SELECT,列的默认值lastupdate似乎优先于SELECT语句产生的值。

即使在SOURCE_TABLE.

例子:

SOURCE_TABLE包含lastupdate = 16.08.12 15:41:44

执行语句后,lastupdateinTARGET_TABLE被设置为SYSDATE,例如16.08.12 15:49:14

INSERT INTO TARGET_TABLE (A, B, C, D, LASTUPDATE, F)
        SELECT A, B, C, D, LASTUPDATE, F
            FROM SOURCE_TABLE
            WHERE B = 'some_value';


CREATE TABLE TARGET_TABLE
(
ID NUMBER NOT NULL,
A VARCHAR2(255 CHAR) NOT NULL,
B VARCHAR2(255 CHAR) NOT NULL,
C CLOB NOT NULL,
D VARCHAR2(255 CHAR),
LASTUPDATE DATE DEFAULT SYSDATE,
E DATE DEFAULT SYSDATE
)

Oracle 版本:Oracle Database 11g Enterprise Edition Release 11.2.0.2.0 - 64bit Production

我希望将值从复制SOURCE_TABLETARGET_TABLE而不是设置为SYSDATE

我在这里想念什么?谢谢你。

4

1 回答 1

1

您可以从显示此行为的 SQL*Plus 会话中复制和粘贴吗?它不会在我的 11.2 数据库上重现,这不是我亲眼见过的事情。

SQL> CREATE TABLE TARGET_TABLE
  2  (
  3  ID NUMBER NOT NULL,
  4  A VARCHAR2(255 CHAR) NOT NULL,
  5  B VARCHAR2(255 CHAR) NOT NULL,
  6  C CLOB NOT NULL,
  7  D VARCHAR2(255 CHAR),
  8  LASTUPDATE DATE DEFAULT SYSDATE,
  9  E DATE DEFAULT SYSDATE
 10  );

Table created.

SQL> ed
Wrote file afiedt.buf

  1  CREATE TABLE SOURCE_TABLE
  2  (
  3  ID NUMBER NOT NULL,
  4  A VARCHAR2(255 CHAR) NOT NULL,
  5  B VARCHAR2(255 CHAR) NOT NULL,
  6  C CLOB NOT NULL,
  7  D VARCHAR2(255 CHAR),
  8  LASTUPDATE DATE DEFAULT SYSDATE,
  9  E DATE DEFAULT SYSDATE
 10* )
SQL> /

Table created.

我不得不将您更改INSERTSOURCE_TABLE指定列E,而不是F因为该CREATE TABLE语句只有一个列E

SQL> insert into source_table( id, a, b, c,d, lastupdate, e )
  2    values( 1, 'A', 'some_value', empty_clob(), 'D', date '2012-01-01', sysdate );

1 row created.

我还必须将您更改INSERTTARGET_TABLE添加ID列,因为它有一个NOT NULL约束。我假设在您的实际示例中,这可能是由TARGET_TABLE从序列中选择数据的触发器填充的。这个触发器(或其他触发器)是否也可以设置该LASTUPDATE值?

SQL> ed
Wrote file afiedt.buf

  1  INSERT INTO TARGET_TABLE (ID, A, B, C, D, LASTUPDATE, E)
  2          SELECT ID, A, B, C, D, LASTUPDATE, E
  3              FROM SOURCE_TABLE
  4*             WHERE B = 'some_value'
SQL> /

1 row created.

SQL> select id, lastupdate from target_table;

        ID LASTUPDAT
---------- ---------
         1 01-JAN-12
于 2012-08-16T14:48:34.440 回答