尝试将一些插入放入表中时出现此错误.
获取有关非有效月份的错误,当我尝试更改它时,我收到无效的数字错误.
ORA-01843: not a valid month ORA-06512: at "SYS.DBMS_SQL"
Run Code Online (Sandbox Code Playgroud)
码:
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);
Run Code Online (Sandbox Code Playgroud)
我也试过使用TO_DATE但没有运气,任何人都可以看到我哪里出错了.
使用DATE关键字和标准日期格式:
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);
Run Code Online (Sandbox Code Playgroud)
除了满足使用标准日期格式的要求外,这还可以防止您更改本地设置。
在您的DDL声明中:
CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus = 'PENDING'/'APPROVED'/'DENIED')
Run Code Online (Sandbox Code Playgroud)
应该:
CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus IN ( 'PENDING', 'APPROVED', 'DENIED' ) )
Run Code Online (Sandbox Code Playgroud)
当你试图插入检查约束正在评估值,并试图在三个字符串值执行除法操作'PENDING'/'APPROVED'/'DENIED'导致ORA-01722: invalid number.
一旦你改变它,然后使用TO_DATE('01/01/02','DD/MM/YY')(如你在评论中写的)或ANSI日期文字DATE '2002-01-01'应该在你的DML语句中工作.
(注意:小心使用2位数年份,或者您可以发现日期是在错误的世纪插入的.)
| 归档时间: |
|
| 查看次数: |
2273 次 |
| 最近记录: |