[英]ORA-01843: not a valid month error in oracle while updating
I want to update my date column with the format as dd-mm-yy
. 我想更新我的日期列,格式为
dd-mm-yy
。 And in my database the column is of date
datatype. 在我的数据库中,该列是
date
数据类型。 So while Updating I am sending data as 因此,在更新时我将数据发送为
05-12-2017
but getting error as 05-12-2017
但是得到错误
ORA-01843: not a valid month
ORA-01843:不是有效月份
in my stored procedure I am sending it as 在我的存储过程中,我发送它
HOTO_ACCEPTENCE_DATE = TO_DATE(PHOTO_ACCEPTENCE_DATE, 'dd-m-yy'),
My full procedure: 我的完整程序:
PROCEDURE UPD_WF_BY_FIBER_ENG
(
PJOB_PROGRESS_ID IN TBL_FIBER_INV_JOB_PROGRESS.JOB_PROGRESS_ID%TYPE,
PSTATUS_ID IN TBL_FIBER_INV_JOB_PROGRESS.STATUS_ID%TYPE,
--PLIT_OFFERED_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.LIT_OFFERED_LENGTH%TYPE,
PHOTO_ACTUAL_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_ACTUAL_LENGTH%TYPE,
PLIT_ACTUAL_LENGTH IN TBL_FIBER_INV_JOB_PROGRESS.LIT_ACTUAL_LENGTH%TYPE,
PHOTO_ACCEPTENCE_DATE IN TBL_FIBER_INV_JOB_PROGRESS.HOTO_ACCEPTENCE_DATE%TYPE,
PLIT_ACCEPTENCE_DATE IN TBL_FIBER_INV_JOB_PROGRESS.LIT_ACCEPTENCE_DATE%TYPE,
PAPPROVED_BY IN TBL_FIBER_INV_JOB_PROGRESS.APPROVED_BY%TYPE,
PREJECTED_BY IN TBL_FIBER_INV_JOB_PROGRESS.REJECTED_BY%TYPE,
PAPPROV_REJECT_REMARK IN TBL_FIBER_INV_JOB_PROGRESS.APPROV_REJECT_REMARK%TYPE,
PMODIFIED_BY IN TBL_FIBER_INV_JOB_PROGRESS.MODIFIED_BY%TYPE,
PUMS_GROUP_ASS_BY_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_ID%TYPE,
PUMS_GROUP_ASS_BY_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_BY_NAME%TYPE,
PUMS_GROUP_ASS_TO_ID IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_ID%TYPE,
PUMS_GROUP_ASS_TO_NAME IN TBL_FIBER_INV_JOB_PROGRESS.UMS_GROUP_ASS_TO_NAME%TYPE,
PISABDMISSING IN TBL_FIBER_INV_JOB_PROGRESS.ISABDMISSING%TYPE,
--PSPVENDORXML IN XMLTYPE,
POUTMSG OUT NVARCHAR2
)
AS
VCNTSPVENCNT NUMBER :=0;
BEGIN
UPDATE TBL_FIBER_INV_JOB_PROGRESS
SET STATUS_ID = PSTATUS_ID,
-- LIT_OFFERED_LENGTH = PLIT_OFFERED_LENGTH,
HOTO_ACTUAL_LENGTH = PHOTO_ACTUAL_LENGTH,
LIT_ACTUAL_LENGTH = PLIT_ACTUAL_LENGTH,
HOTO_ACCEPTENCE_DATE = TO_DATE(PHOTO_ACCEPTENCE_DATE, 'DD-MM-YY'),
LIT_ACCEPTENCE_DATE = TO_DATE(PLIT_ACCEPTENCE_DATE, 'DD-MM-YY'),
APPROVED_BY = PAPPROVED_BY,
APPROVED_DATE = DECODE(PAPPROVED_BY,NULL,NULL,SYSDATE),
REJECTED_BY = PREJECTED_BY,
REJECTED_DATE = DECODE(PREJECTED_BY,NULL,NULL,SYSDATE),
APPROV_REJECT_REMARK = PAPPROV_REJECT_REMARK,
MODIFIED_BY = PMODIFIED_BY,
MODIFIED_DATE = SYSDATE,
UMS_GROUP_ASS_BY_ID = PUMS_GROUP_ASS_BY_ID,
UMS_GROUP_ASS_BY_NAME = PUMS_GROUP_ASS_BY_NAME,
UMS_GROUP_ASS_TO_ID = PUMS_GROUP_ASS_TO_ID,
UMS_GROUP_ASS_TO_NAME = PUMS_GROUP_ASS_TO_NAME,
ISABDMISSING = PISABDMISSING
WHERE JOB_PROGRESS_ID = PJOB_PROGRESS_ID;
update 更新
try
{
DBObject ObjDBObject = new DBObject(strConnectionString);
string strProcedureName = strPackageName + ".UPD_WF_BY_FIBER_ENG";
List<OracleParameter> lstParameters = new List<OracleParameter>();
OracleParameter ObjOracleParameter = new OracleParameter("PJOB_PROGRESS_ID", FiberDataInsertion.PROG_ID);
OracleParameter ObjOracleParameter1 = new OracleParameter("PSTATUS_ID", 1);
OracleParameter ObjOracleParameter2 = new OracleParameter("PHOTO_ACTUAL_LENGTH", FiberDataInsertion.HOTO_ACTUAL_LENGTH);
OracleParameter ObjOracleParameter3 = new OracleParameter("PLIT_ACTUAL_LENGTH", FiberDataInsertion.LIT_ACTUAL_LENGTH);
OracleParameter ObjOracleParameter4 = new OracleParameter("PHOTO_ACCEPTENCE_DATE", FiberDataInsertion.HOTO_ACCP_DATE);
OracleParameter ObjOracleParameter5 = new OracleParameter("PLIT_ACCEPTENCE_DATE", FiberDataInsertion.LIT_ACCP_DATE);
OracleParameter ObjOracleParameter6 = new OracleParameter("PAPPROVED_BY", "NADEEM5.KHAN");
OracleParameter ObjOracleParameter7 = new OracleParameter("PREJECTED_BY", "DB");
OracleParameter ObjOracleParameter8 = new OracleParameter("PAPPROV_REJECT_REMARK", "this is test");
OracleParameter ObjOracleParameter9 = new OracleParameter("PMODIFIED_BY", FiberDataInsertion.MODIFIED_BY);
OracleParameter ObjOracleParameter10 = new OracleParameter("PUMS_GROUP_ASS_BY_ID", FiberDataInsertion.UMS_GROUP_ASS_BY_ID);
OracleParameter ObjOracleParameter11 = new OracleParameter("PUMS_GROUP_ASS_BY_NAME", FiberDataInsertion.UMS_GROUP_ASS_BY_NAME);
OracleParameter ObjOracleParameter12 = new OracleParameter("PUMS_GROUP_ASS_TO_ID", FiberDataInsertion.UMS_GROUP_ASS_TO_ID);
OracleParameter ObjOracleParameter13 = new OracleParameter("PUMS_GROUP_ASS_TO_NAME", FiberDataInsertion.UMS_GROUP_ASS_TO_NAME);
OracleParameter ObjOracleParameter14 = new OracleParameter("PISABDMISSING", FiberDataInsertion.MISS_ASBUILT);
OracleParameter ObjOracleParameter15 = new OracleParameter
{
ParameterName = "POUTMSG",
Size = 500,
OracleDbType = OracleDbType.NVarchar2,
Direction = ParameterDirection.Output
};
lstParameters.Add(ObjOracleParameter);
lstParameters.Add(ObjOracleParameter1);
lstParameters.Add(ObjOracleParameter2);
lstParameters.Add(ObjOracleParameter3);
lstParameters.Add(ObjOracleParameter4);
lstParameters.Add(ObjOracleParameter5);
lstParameters.Add(ObjOracleParameter6);
lstParameters.Add(ObjOracleParameter7);
lstParameters.Add(ObjOracleParameter8);
lstParameters.Add(ObjOracleParameter9);
lstParameters.Add(ObjOracleParameter10);
lstParameters.Add(ObjOracleParameter11);
lstParameters.Add(ObjOracleParameter12);
lstParameters.Add(ObjOracleParameter13);
lstParameters.Add(ObjOracleParameter14);
lstParameters.Add(ObjOracleParameter15);
strMessage = ObjDBObject.ExecuteNonQuery(strProcedureName, lstParameters);
}
catch (Exception)
{
throw;
}
return strMessage;
Also the error details 还有错误的详细信息
at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at FiberInventoryPortal.Models.DAL.DBObject.ExecuteNonQuery(String strProcedureName, List
1 lstParameters) in d:\\Nadeem\\FiberInventory_214\\FiberInventoryPortal\\FiberInventoryPortal\\Models\\DAL\\DBObject.cs:line 114` at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at FiberInventoryPortal.Models.DAL.DBObject.ExecuteNonQuery(String strProcedureName, List
bCheck)在D:\\中的at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at FiberInventoryPortal.Models.DAL.DBObject.ExecuteNonQuery(String strProcedureName, List
1 lstParameters)的at Oracle.DataAccess.Client.OracleException.HandleErrorHelper(Int32 errCode, OracleConnection conn, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, String procedure, Boolean bCheck) at Oracle.DataAccess.Client.OracleException.HandleError(Int32 errCode, OracleConnection conn, String procedure, IntPtr opsErrCtx, OpoSqlValCtx* pOpoSqlValCtx, Object src, Boolean bCheck) at Oracle.DataAccess.Client.OracleCommand.ExecuteNonQuery() at FiberInventoryPortal.Models.DAL.DBObject.ExecuteNonQuery(String strProcedureName, List
Nadeem \\ FiberInventory_214 \\ FiberInventoryPortal \\ FiberInventoryPortal \\ Models \\ DAL \\ DBObject.cs:第114行
HOTO_ACCEPTENCE_DATE = TO_DATE(PHOTO_ACCEPTENCE_DATE, 'DD-MM-YY')
TO_DATE( date_string, format_model, nls_params )
takes a string as the first argument so Oracle must implicitly convert a non-string argument to a string and is effectively doing: TO_DATE( date_string, format_model, nls_params )
将字符串作为第一个参数,因此Oracle必须将非字符串参数隐式转换为字符串,并且有效地执行:
HOTO_ACCEPTENCE_DATE = TO_DATE(
TO_CHAR(
PHOTO_ACCEPTENCE_DATE,
( SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_DATE_FORMAT' )
),
'DD-MM-YY'
)
If the NLS_DATE_FORMAT
session parameter does not match DD-MM-YY
then you will get an error. 如果
NLS_DATE_FORMAT
会话参数与DD-MM-YY
不匹配,则会出现错误。 Since the NLS_DATE_FORMAT
is a session parameter and can be changed by each user then relying on this is one way for your code to start raising exception as the users change their settings without your code ever changing. 由于
NLS_DATE_FORMAT
是一个会话参数,并且可以由每个用户更改,因此依赖于此是代码开始引发异常的一种方法,因为用户在不更改代码的情况下更改其设置。
What you want to do is just use: 你想要做的只是使用:
HOTO_ACCEPTENCE_DATE = PHOTO_ACCEPTENCE_DATE,
As you do not need to convert a date to anything when you are storing it as a date. 因为当您将日期存储为日期时,您不需要将日期转换为任何内容。
I want to update my date column with the format as
dd-mm-yy
.我想更新我的日期列,格式为
dd-mm-yy
。
A date does not have a format - it is stored internally to the database as 7-bytes (representing year, month, day, hour, minute and second) and it is not until whatever user interface you are using (ie SQL/Plus, SQL Developer, Java, etc) tries to display it to you, the user, and converts it into something you would find meaningful (usually a string) that the date has a format. 日期没有格式 - 它以7字节 (代表年,月,日,小时,分钟和秒)的内部存储在数据库中,直到您使用的是任何用户界面(即SQL / Plus, SQL Developer,Java等尝试将它显示给您,即用户,并将其转换为您认为有效的(通常是字符串)日期具有格式的内容。
Considering the format you posted, 'dd-m-yy'
, it seems that the month part is incorrect. 考虑到您发布的格式
'dd-m-yy'
,似乎月份部分不正确。 It should be MM
instead of M
. 它应该是
MM
而不是M
Ref.: https://docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm 参考: https : //docs.oracle.com/cd/B19306_01/server.102/b14200/sql_elements004.htm
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.