0

TARGET_TABLEwith belowステートメントに値を挿入すると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 リリース 11.2.0.2.0 - 64 ビット製品

値をに設定せずにからSOURCE_TABLEにコピーしたいと思います。TARGET_TABLESYSDATE

ここで何が欠けていますか?ありがとうございました。

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.

ステートメントに column しかなかったので、column を指定するためにyour を変更するINSERT必要がありました。SOURCE_TABLEEFCREATE TABLEE

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.

また、制約があるため、列を追加するためにあなたINSERTを変更する必要がありました。あなたの実際の例では、これはおそらくシーケンスからデータを選択しているトリガーによって取り込まれていると思います。このトリガー (または他のトリガー) も値を設定している可能性はありますか?TARGET_TABLEIDNOT NULLTARGET_TABLELASTUPDATE

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 に答える