ORA-01481: to_date 处的数字格式模型无效
ORA-01481: invalid number format model at to_date
这是我的 table:
create table exemplare(
id integer,
id_tierart integer not null,
name varchar2(32),
details varchar2(32),
geburtsdatum date,
kaufdatum date,
constraint pk_exemplare_id primary key(id),
constraint fk_exemplare_id_tierarzt foreign key(id_tierart) references tierarten(id),
constraint uq_exemplare_name unique(name, id_tierart),
constraint ck_exemplare_geburtsdatum check(to_char(geburtsdatum, 'mm') < 10),
-- constraint ck_exemplare_kaufdatum check(to_char(geburtsdatum, 'yyyy') - to_char(kaufdatum, 'yyyy') <= 100),
constraint ck_exemplare_kaufdatum check(to_char(kaufdatum-geburtsdatum, 'yyyy') <= 100),
constraint ck_exemplare_id check(MOD(id, 10) = 0)
);
insert into exemplare values(10, 11, 'Hugo', 'bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'));
insert into exemplare values(20, 22, 'Fred', 'nicht bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'));
在插入处说:
Fehler beim Start in Zeile: 66 in Befehl -
insert into exemplare values(20, 22, 'Fred', 'nicht bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'))
Fehlerbericht -
ORA-01481: invalid model for number format
这似乎是 to_date 函数的某种问题,但我无法弄清楚到底是什么问题
有谁知道为什么它不起作用?
我认为问题是这个约束:
constraint ck_exemplare_kaufdatum check(to_char(kaufdatum-geburtsdatum, 'yyyy') <= 100),
我们可以在 Oracle 中对日期进行算术运算,所以这个 kaufdatum-geburtsdatum
有效但结果是 numeric。因此在 TO_CHAR() 中使用日期格式掩码是无效的。
您发布的代码显示了应该有效的约束的注释版本。为什么不用它呢?
constraint ck_exemplare_kaufdatum check(to_char(geburtsdatum, 'yyyy') - to_char(kaufdatum, 'yyyy') <= 100)
这是我的 table:
create table exemplare(
id integer,
id_tierart integer not null,
name varchar2(32),
details varchar2(32),
geburtsdatum date,
kaufdatum date,
constraint pk_exemplare_id primary key(id),
constraint fk_exemplare_id_tierarzt foreign key(id_tierart) references tierarten(id),
constraint uq_exemplare_name unique(name, id_tierart),
constraint ck_exemplare_geburtsdatum check(to_char(geburtsdatum, 'mm') < 10),
-- constraint ck_exemplare_kaufdatum check(to_char(geburtsdatum, 'yyyy') - to_char(kaufdatum, 'yyyy') <= 100),
constraint ck_exemplare_kaufdatum check(to_char(kaufdatum-geburtsdatum, 'yyyy') <= 100),
constraint ck_exemplare_id check(MOD(id, 10) = 0)
);
insert into exemplare values(10, 11, 'Hugo', 'bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'));
insert into exemplare values(20, 22, 'Fred', 'nicht bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'));
在插入处说:
Fehler beim Start in Zeile: 66 in Befehl -
insert into exemplare values(20, 22, 'Fred', 'nicht bedroht', to_date('13.05.1975', 'dd.mm.yyyy'), to_date('04.07.2018', 'dd.mm.yyyy'))
Fehlerbericht -
ORA-01481: invalid model for number format
这似乎是 to_date 函数的某种问题,但我无法弄清楚到底是什么问题 有谁知道为什么它不起作用?
我认为问题是这个约束:
constraint ck_exemplare_kaufdatum check(to_char(kaufdatum-geburtsdatum, 'yyyy') <= 100),
我们可以在 Oracle 中对日期进行算术运算,所以这个 kaufdatum-geburtsdatum
有效但结果是 numeric。因此在 TO_CHAR() 中使用日期格式掩码是无效的。
您发布的代码显示了应该有效的约束的注释版本。为什么不用它呢?
constraint ck_exemplare_kaufdatum check(to_char(geburtsdatum, 'yyyy') - to_char(kaufdatum, 'yyyy') <= 100)