NULL 日期字段默认使用 SYSDATE 填充
NULL Date field is populated with SYSDATE by default
我正在运行查询我公司的时钟数据。我有一个包含 2 个字段的查询:CLOCK_IN1
和 CLOCK_OUT1
。当我 运行 查询时,我看到了正确的 CLOCK_IN1
,但是 CLOCK_OUT1
被填充了接近 SYSDATE
的日期。 CLOCK_OUT1
在数据库中是 NULL
,它正在用这个日期替换 NULL
。
是否有设置在 NULL
时填充日期?
两者都有
- 应用于该列的
DEFAULT
值,或
- 执行此操作的数据库触发器。
这是第一个的工作原理:
SQL> create table test
2 (clock_in1 date,
3 clock_out1 date default sysdate
4 );
Table created.
SQL> insert into test (clock_in1) values (date '2020-08-23');
1 row created.
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
03.11.2020 20:23:03
SQL> select * from test;
CLOCK_IN1 CLOCK_OUT1
------------------- -------------------
23.08.2020 00:00:00 03.11.2020 20:22:48
SQL>
这是第二个:
SQL> drop table test;
Table dropped.
SQL> create table test
2 (clock_in1 date,
3 clock_out1 date
4 );
Table created.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.clock_out1 := nvl(:new.clock_out1, sysdate);
6 end;
7 /
Trigger created.
SQL> insert into test (clock_in1) values (date '2020-08-23');
1 row created.
SQL> select * from test;
CLOCK_IN1 CLOCK_OUT1
------------------- -------------------
23.08.2020 00:00:00 03.11.2020 20:24:23
SQL>
如何“修复”它?
SQL> alter table test modify clock_out1 default null;
Table altered.
SQL>
从触发器开始,好吧......这取决于它在做什么,但是 - 删除设置列值的行就可以了。
我正在运行查询我公司的时钟数据。我有一个包含 2 个字段的查询:CLOCK_IN1
和 CLOCK_OUT1
。当我 运行 查询时,我看到了正确的 CLOCK_IN1
,但是 CLOCK_OUT1
被填充了接近 SYSDATE
的日期。 CLOCK_OUT1
在数据库中是 NULL
,它正在用这个日期替换 NULL
。
是否有设置在 NULL
时填充日期?
两者都有
- 应用于该列的
DEFAULT
值,或 - 执行此操作的数据库触发器。
这是第一个的工作原理:
SQL> create table test
2 (clock_in1 date,
3 clock_out1 date default sysdate
4 );
Table created.
SQL> insert into test (clock_in1) values (date '2020-08-23');
1 row created.
SQL> alter session set nls_date_format = 'dd.mm.yyyy hh24:mi:ss';
Session altered.
SQL> select sysdate from dual;
SYSDATE
-------------------
03.11.2020 20:23:03
SQL> select * from test;
CLOCK_IN1 CLOCK_OUT1
------------------- -------------------
23.08.2020 00:00:00 03.11.2020 20:22:48
SQL>
这是第二个:
SQL> drop table test;
Table dropped.
SQL> create table test
2 (clock_in1 date,
3 clock_out1 date
4 );
Table created.
SQL> create or replace trigger trg_bi_test
2 before insert on test
3 for each row
4 begin
5 :new.clock_out1 := nvl(:new.clock_out1, sysdate);
6 end;
7 /
Trigger created.
SQL> insert into test (clock_in1) values (date '2020-08-23');
1 row created.
SQL> select * from test;
CLOCK_IN1 CLOCK_OUT1
------------------- -------------------
23.08.2020 00:00:00 03.11.2020 20:24:23
SQL>
如何“修复”它?
SQL> alter table test modify clock_out1 default null;
Table altered.
SQL>
从触发器开始,好吧......这取决于它在做什么,但是 - 删除设置列值的行就可以了。