【发布时间】:2021-07-12 10:39:03
【问题描述】:
insert into challen_header
values('CH9001',019001,TO_DATE('DD-MM-YYYY','12-12-95','Y'));
insert into challen_header
values('CH865',016865,TO_DATE('DD-MM-YYYY','12-11-95','Y'));
insert into challen_header
values('CH3965',019001,TO_DATE('DD-MM-YYYY','12-10-95','Y'));
select * from challen_header;
我收到此错误:
从第 1 行开始的错误在命令中
插入 challen_header 值('CH9001',019001,TO_DATE('DD-MM-YYYY','12-12-95','Y'))
命令行错误:1 列:13
错误报告
SQL 错误:ORA-00947:值不足
00947. 00000 - “没有足够的值”
有人对此有解决方案吗?我正在使用 SQL Developer。
表结构:
CREATE TABLE Challen_header
(
challen_no varchar2(6) primary key,
s_order_no varchar2(6),
foreign key(s_order_no) references sales_order(s_order_no),
Challen_date date not null,
billed_yn char default 'N' check(billed_yn = 'Y' or billed_yn = 'N')
);
这是我要创建的表。
【问题讨论】:
-
始终在
INSERT语句中明确列出目标列!那么造成这种情况的原因就很明显了…… -
是语法 TO_DATE('DD-MM-YYYY','12-12-95','Y') 对吗?
-
请张贴表结构
-
TO_DATE是错误的。您应该首先显示日期字符串,例如 '12-12-95' - 然后当您在输入中使用两位数年份时,不要告诉 Oracle 格式是 'DD-MM-YYYY' 来欺骗 Oracle细绳。您可能想要“DD-MM-RR”。那么 -TO_DATE末尾的“Y”是什么?那应该是另一列的值吗?你把它显示在TO_DATE里面,这是没有意义的。 -
所以 - 好的;从
TO_DATE中取出“Y”和“N”,并修复TO_DATE。那么,您确定这些日期是 DAY-MONTH,而不是 MONTH-DAY?你有 12 月 12 日、11 月 12 日、10 月 12 日吗?不是 12 月 12 日、12 月 11 日、12 月 10 日 - 在您的示例中?