Oracle 不使用新列的默认值更新现有记录

Oracle 不使用新列的默认值更新现有记录,oracle,Oracle,我有一张有一些唱片的桌子 我想在此表中添加一个时间戳列类型(LAST\u MODIFIED)。我想将这个新列的默认值设置为SYSDATE 但我想确保添加此列时,现有记录不会将此列的值设置为SYSDATE。如何实现这一点?您应该将其作为两个单独的操作:添加列和设置默认值 SQL> create table some_data (id integer); Table created SQL> insert into some_data select rownum from dual

我有一张有一些唱片的桌子

我想在此表中添加一个
时间戳
列类型(
LAST\u MODIFIED
)。我想将这个新列的
默认值设置为
SYSDATE


但我想确保添加此列时,现有记录不会将此列的值设置为
SYSDATE
。如何实现这一点?

您应该将其作为两个单独的操作:添加列和设置默认值

SQL> create table some_data (id integer);

Table created

SQL> insert into some_data select rownum from dual connect by level <= 5;

5 rows inserted

SQL> alter table some_data add date_modified date;

Table altered

SQL> alter table some_data modify date_modified default sysdate;

Table altered

SQL> insert into some_data (id) values (6);

1 row inserted

SQL> select * from some_data;

                                     ID DATE_MODIFIED
--------------------------------------- -------------
                                      1 
                                      2 
                                      3 
                                      4 
                                      5 
                                      6 17.03.2015

6 rows selected
SQL>创建一些表数据(id整数);
创建的表
SQL>insert into some_data从dual connect by level alter table中选择rownum some_data add date\u modified date;
表格更改
SQL>alter table一些\u数据修改日期\u修改默认系统日期;
表格更改
SQL>插入一些_数据(id)值(6);
插入1行
SQL>从一些数据中选择*;
ID日期\u已修改
--------------------------------------- -------------
1.
2.
3.
4.
5.
6 17.03.2015
选择6行

您应该将其作为两个单独的操作:添加列和设置默认值

SQL> create table some_data (id integer);

Table created

SQL> insert into some_data select rownum from dual connect by level <= 5;

5 rows inserted

SQL> alter table some_data add date_modified date;

Table altered

SQL> alter table some_data modify date_modified default sysdate;

Table altered

SQL> insert into some_data (id) values (6);

1 row inserted

SQL> select * from some_data;

                                     ID DATE_MODIFIED
--------------------------------------- -------------
                                      1 
                                      2 
                                      3 
                                      4 
                                      5 
                                      6 17.03.2015

6 rows selected
SQL>创建一些表数据(id整数);
创建的表
SQL>insert into some_data从dual connect by level alter table中选择rownum some_data add date\u modified date;
表格更改
SQL>alter table一些\u数据修改日期\u修改默认系统日期;
表格更改
SQL>插入一些_数据(id)值(6);
插入1行
SQL>从一些数据中选择*;
ID日期\u已修改
--------------------------------------- -------------
1.
2.
3.
4.
5.
6 17.03.2015
选择6行

您应该将其作为两个单独的操作:添加列和设置默认值

SQL> create table some_data (id integer);

Table created

SQL> insert into some_data select rownum from dual connect by level <= 5;

5 rows inserted

SQL> alter table some_data add date_modified date;

Table altered

SQL> alter table some_data modify date_modified default sysdate;

Table altered

SQL> insert into some_data (id) values (6);

1 row inserted

SQL> select * from some_data;

                                     ID DATE_MODIFIED
--------------------------------------- -------------
                                      1 
                                      2 
                                      3 
                                      4 
                                      5 
                                      6 17.03.2015

6 rows selected
SQL>创建一些表数据(id整数);
创建的表
SQL>insert into some_data从dual connect by level alter table中选择rownum some_data add date\u modified date;
表格更改
SQL>alter table一些\u数据修改日期\u修改默认系统日期;
表格更改
SQL>插入一些_数据(id)值(6);
插入1行
SQL>从一些数据中选择*;
ID日期\u已修改
--------------------------------------- -------------
1.
2.
3.
4.
5.
6 17.03.2015
选择6行

您应该将其作为两个单独的操作:添加列和设置默认值

SQL> create table some_data (id integer);

Table created

SQL> insert into some_data select rownum from dual connect by level <= 5;

5 rows inserted

SQL> alter table some_data add date_modified date;

Table altered

SQL> alter table some_data modify date_modified default sysdate;

Table altered

SQL> insert into some_data (id) values (6);

1 row inserted

SQL> select * from some_data;

                                     ID DATE_MODIFIED
--------------------------------------- -------------
                                      1 
                                      2 
                                      3 
                                      4 
                                      5 
                                      6 17.03.2015

6 rows selected
SQL>创建一些表数据(id整数);
创建的表
SQL>insert into some_data从dual connect by level alter table中选择rownum some_data add date\u modified date;
表格更改
SQL>alter table一些\u数据修改日期\u修改默认系统日期;
表格更改
SQL>插入一些_数据(id)值(6);
插入1行
SQL>从一些数据中选择*;
ID日期\u已修改
--------------------------------------- -------------
1.
2.
3.
4.
5.
6 17.03.2015
选择6行


显示您的sqlstatement@Jens:ALTER TABLE MYTABLE ADD(上次修改的时间戳);显示您的sqlstatement@Jens:ALTER TABLE MYTABLE ADD(上次修改的时间戳);显示您的sqlstatement@Jens:ALTER TABLE MYTABLE ADD(上次修改的时间戳);显示您的sqlstatement@Jens:ALTER TABLE MYTABLE ADD(上次修改的时间戳)@Apurv没有要求阻止这种情况。触发器有它自己的问题;比如说,它阻止了。@PavelGatnar:您在问题的哪里看到了阻止列更新的要求?@Pavel,触发器的值是多少,它不适用于直接插入的记录,也不适用于同时添加的任何其他记录?这是胡说八道。禁止在生产环境中禁用触发器,因为它会破坏所有用户的业务逻辑;它只能在独占模式下完成。@Sanders软件我们已经在多家公司使用触发器解决方案20多年了,也许它有一些价值。。。顺便说一句,触发器不仅更新列,还将数据库中的所有更改报告给应用程序日志,并间接报告给MQ,以便分发给SAP和其他系统。@Apurv没有要求阻止这种情况。触发器有它自己的问题;比如说,它阻止了。@PavelGatnar:您在问题的哪里看到了阻止列更新的要求?@Pavel,触发器的值是多少,它不适用于直接插入的记录,也不适用于同时添加的任何其他记录?这是胡说八道。禁止在生产环境中禁用触发器,因为它会破坏所有用户的业务逻辑;它只能在独占模式下完成。@Sanders软件我们已经在多家公司使用触发器解决方案20多年了,也许它有一些价值。。。顺便说一句,触发器不仅更新列,还将数据库中的所有更改报告给应用程序日志,并间接报告给MQ,以便分发给SAP和其他系统。@Apurv没有要求阻止这种情况。触发器有它自己的问题;比如说,它阻止了。@PavelGatnar:您在问题的哪里看到了阻止列更新的要求?@Pavel,触发器的值是什么,它对直接插入的记录和