Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &引用;不是有效月份”;或数字_Sql_Oracle_Oracle11g - Fatal编程技术网

Sql &引用;不是有效月份”;或数字

Sql &引用;不是有效月份”;或数字,sql,oracle,oracle11g,Sql,Oracle,Oracle11g,在尝试向表中插入一些内容时出现此错误 得到一个关于无效月份的错误,当我尝试改变它时,我得到了无效的数字错误 ORA-01843: not a valid month ORA-06512: at "SYS.DBMS_SQL" 代码: 我也试过用来约会,但是运气不好, 任何人都可以看到我的错误所在。使用和标准日期格式: INSERT INTO ExpenseReport (ERNo, ERDesc, ERSubmitDate, ERStatusDate, ERStatus, SubmitUserN

在尝试向表中插入一些内容时出现此错误

得到一个关于无效月份的错误,当我尝试改变它时,我得到了无效的数字错误

ORA-01843: not a valid month ORA-06512: at "SYS.DBMS_SQL"
代码:

我也试过用
来约会
,但是运气不好, 任何人都可以看到我的错误所在。

使用和标准日期格式:

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);
除了满足使用标准日期格式的要求外,这还可以保护您免受本地设置的更改。

在DDL声明中:

CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus = 'PENDING'/'APPROVED'/'DENIED')
应该是:

CONSTRAINT ExpenseReport_CK2 CHECK (ERStatus IN ( 'PENDING', 'APPROVED', 'DENIED' ) )
当您尝试插入值时,检查约束将被评估,并且它将尝试对三个字符串值执行除法操作
'PENDING'/'APPROVED'/'DENIED'
,这将导致
ORA-01722:无效数字

一旦您将其更改为_DATE('01/01/02','DD/MM/YY')(如您在注释中所写)或ANSI日期文字
日期'2002-01-01'
应适用于您的DML语句

(注意:使用2位数年份时要小心,否则您会发现)

并按显示的方式进入。或

change your date format: alter session set nls_date_format= 'DD-Mon-YYYY HH24:MI:SS';

你是说,
截止日期('8/26/2002','mm/dd/yyyyy')
不起作用吗?我也尝试过这样做,插入到ExpenseReport(ERNo,ERDesc,ERSubmitDate,ERStatusDate,ERStatusDate,ERStatus,SubmitUserNo,AppUserNo)值(1,'Sales Presentation',截止日期('01/01/02','dd/mm/YY'),截止日期)('02/02/03','DD/MM/YY'),'APPROVED',3,4);@John-当你这么做的时候发生了什么?(还有,为什么你在这一年中使用两位数的年份?你似乎也有转换日期和月份?)@AlexPoole-为了让它发挥作用,我试了很多年了,根据我在其他问题上看到的情况,我试了两位数和四位数。出于某种原因,我一直在得到一个关于月数的错误。不过,你在评论中显示的代码不会抛出这个错误。如果你混淆了日期和月份,通常会得到这个错误隐式地,正如您在问题中的原始语句中所述。尝试在那里使用该代码位,但我仍然收到以下错误ORA-01722:无效编号ORA-06512:“SYS.DBMS_SQL”,行1721@John-无效数字与日期转换无关,它来自另一列。事实上,从你的支票约束支出报告中。更仔细地看…@AlexPoole-我有一个类似的列,没有日期,它工作得很好。我认为日期在这里面抛开了一切,可能吗e时间和日期的不同格式会影响这一点,因为我使用的是欧洲格式?@John-不,你看到的是两个不相关的问题。只有在你解决了第一个遇到的日期问题后,你才能从约束中看到数字问题。你不应该依赖NLS设置,或者使用隐式转换。除了一次性的、特别的code,请始终明确说明格式-使用
to_date()
和合适的掩码,或者最好使用日期文字-正如Gordon所说。您的代码可以在您无法控制的客户机或会话中运行,因此不要给它一个打破琐碎内容的机会。
Check your date format: select sysdate from dual;
change your date format: alter session set nls_date_format= 'DD-Mon-YYYY HH24:MI:SS';