使用TARGET_TABLE
语句将值插入INSERT..SELECT
时,列lastupdate
的列默认值似乎优先于SELECT
语句产生的值。
即使SOURCE_TABLE
中的此列始终存在值。
示例:
SOURCE_TABLE
包含lastupdate = 16.08.12 15:41:44
执行该语句后,lastupdate
中的TARGET_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企业版11.2.0.2.0版 - 64位生产
我希望将值从SOURCE_TABLE
复制到TARGET_TABLE
,而不是设置为SYSDATE
。
我在这里缺少什么?谢谢。
答案 0 :(得分: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.
我必须将您的INSERT
更改为SOURCE_TABLE
以指定列E
而不是F
,因为CREATE TABLE
语句只有一列{{1} }}
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.
更改为INSERT
以添加TARGET_TABLE
列,因为它具有ID
约束。我假设在您的实际示例中,这可能是由NOT NULL
上的触发器填充的,该触发器正在从序列中选择数据。此触发器(或其他触发器)是否可能同时设置TARGET_TABLE
值?
LASTUPDATE