尝试将一些插入放入表格时出现此错误。
获取有关非有效月份的错误,当我尝试更改错误时,我会收到无效的号码错误。
ORA-01843: not a valid month ORA-06512: at "SYS.DBMS_SQL"
代码:
CREATE TABLE ExpenseReport (
ERNo NUMERIC(10) NOT NULL,
ERDesc VARCHAR(255) NOT NULL,
ERSubmitDate DATE DEFAULT CURRENT_TIMESTAMP,
ERStatusDate DATE NOT NULL,
ERStatus VARCHAR(8) DEFAULT 'PENDING',
SubmitUserNo NUMERIC(10) NOT NULL,
ApprUserNo NUMERIC(10) NOT NULL,
CONSTRAINT ExpenseReport_CK1 CHECK (ERStatusDate >= ERSubmitDate),
CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus = 'PENDING'/'APPROVED'/'DENIED'),
CONSTRAINT ExpenseReport_PK1 PRIMARY KEY(ERNo),
CONSTRAINT ExpenseReport_FK1 FOREIGN KEY(SubmitUserNo) REFERENCES Users(UserNo),
CONSTRAINT ExpenseReport_FK2 FOREIGN KEY(ApprUserNo) REFERENCES (USerNo)
);
INSERT INTO ExpenseReport
(ERNo, ERDesc, ERSubmitDate, ERStatusDate, ERStatus, SubmitUserNo, ApprUSerNo)
VALUES (1,'Sales Presentation','8/10/2002','8/26/2002','APPROVED',3,4);
我也试过使用TO_DATE
,但没有运气,
任何人都可以看到我出错的地方。
答案 0 :(得分:5)
在您的DDL声明中:
CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus = 'PENDING'/'APPROVED'/'DENIED')
应该是:
CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus IN ( 'PENDING', 'APPROVED', 'DENIED' ) )
当您尝试插入值时,正在评估检查约束,并且它正尝试对三个字符串值'PENDING'/'APPROVED'/'DENIED'
执行除法运算,从而产生ORA-01722: invalid number
。
更改此内容后,使用TO_DATE('01/01/02','DD/MM/YY')
(正如您在评论中所写)或ANSI日期文字DATE '2002-01-01'
应该可以在您的DML语句中使用。
(注意:小心使用2位数年份,或者你可以找到dates are inserted with the wrong century.)
答案 1 :(得分:4)
使用DATE
keyword和标准日期格式:
INSERT INTO ExpenseReport (ERNo, ERDesc, ERSubmitDate, ERStatusDate, ERStatus, SubmitUserNo, ApprUSerNo)
VALUES (1, 'Sales Presentation', DATE '2001-08-10', DATE '2001-08-2006', 'APPROVED', 3, 4);
除了满足使用标准日期格式之外,这还可以保护您免受本地设置的更改。
答案 2 :(得分:0)
Check your date format: select sysdate from dual;
并按原样输入。 OR
change your date format: alter session set nls_date_format= 'DD-Mon-YYYY HH24:MI:SS';