Oracle ORA-1843:更新记录时不是有效月份
出于某种目的,我想更新我的日期列。列中已存储的值如下所示Oracle ORA-1843:更新记录时不是有效月份,oracle,stored-procedures,plsql,sql-update,Oracle,Stored Procedures,Plsql,Sql Update,出于某种目的,我想更新我的日期列。列中已存储的值如下所示 18-06-14 在更新时,如果我不更新任何东西并调试和检查它,它的格式为2014-06-18T00:00:00 因此,在更新过程中,我得到如下错误 ORA-1843:不是有效月份 下面是我如何将其作为参数发送以进行更新 LAUNCH\u DATE=p\u LAUNCH\u DATE, 在p_LAUNCH_DATE中,我有要更新的值。这给了我上述的错误。我该如何解决它 更新 这是我的整个StoredProcedure,我使用它的方式 PR
18-06-14
在更新时,如果我不更新任何东西并调试和检查它,它的格式为2014-06-18T00:00:00
因此,在更新过程中,我得到如下错误
ORA-1843:不是有效月份
下面是我如何将其作为参数发送以进行更新
LAUNCH\u DATE=p\u LAUNCH\u DATE,
在p_LAUNCH_DATE
中,我有要更新的值。这给了我上述的错误。我该如何解决它
更新
这是我的整个StoredProcedure,我使用它的方式
PROCEDURE INSERT_INTO_RRSOC_MST
(
P_STORE_CODE IN NVARCHAR2,
P_STATE IN NVARCHAR2,
P_CITY IN NVARCHAR2,
P_SITE_STORE_FORMAT IN NVARCHAR2,
P_STORE_SITENAME IN NVARCHAR2,
P_STORE_SITENAME_LANDL_1 IN NVARCHAR2,
P_STORE_SITENAME_LANDL_2 IN NVARCHAR2,
P_STORE_ASST_MANAGER_NAME IN NVARCHAR2,
P_STORE_ASST_MANAGER_MOBNO IN NVARCHAR2,
P_STORE_MANAGER_NAME IN NVARCHAR2,
P_MANAGER_MOBNO IN NVARCHAR2,
P_EMP_NEAREST_STORE IN NVARCHAR2,
P_EMP_NEAREST_STORE_MOBNO IN NVARCHAR2,
P_SUPERVISOR_NAME IN NVARCHAR2,
P_SUPERVISOR_MOBNO IN NVARCHAR2,
P_SECURITY_SUP_NAME_STORE IN NVARCHAR2,
P_SECURITY_SUP_MOBNO_STORE IN NVARCHAR2,
P_NAME_ALIGNED_LPO IN NVARCHAR2,
P_LPO_MOBILENO IN NVARCHAR2,
P_ALPM_ALPO_NAME IN NVARCHAR2,
P_ALPM_ALPO_MOBNO IN NVARCHAR2,
P_AREA_MANAGER_NAME IN NVARCHAR2,
P_AREA_MANAGER_MOBNO IN NVARCHAR2,
P_ZONAL_HEAD_NAME IN NVARCHAR2,
P_ZONAL_HEAD_NO IN NVARCHAR2,
P_DVR_IP_ADDRESS IN NVARCHAR2,
P_SIGNET_IP_ADDRESS IN NVARCHAR2,
P_NEAREST_POLICE_STN_NAME IN NVARCHAR2,
P_NEAREST_POLICE_STN_CONTNO IN NVARCHAR2,
P_NEAREST_HOSP_NAME IN NVARCHAR2,
P_NEAREST_HOSP_CONTNO IN NVARCHAR2,
P_NEAREST_FIRE_STN_CONTNAME IN NVARCHAR2,
P_NEAREST_FIRE_STN_CONTNO IN NVARCHAR2,
P_STORE_ADDRESS IN CLOB,
P_STORE_SPACE_SQFT IN NUMBER,
P_LAUNCH_DATE IN DATE,
P_CST_TIN_NO IN NVARCHAR2,
P_STORE_EMAILID IN NVARCHAR2,
P_NO_OF_POS IN NUMBER,
P_NO_OF_CAMERA IN NUMBER,
P_DVR_MODEL_GESECURITY IN NVARCHAR2,
P_CAMERA_MODEL IN NVARCHAR2,
P_ALIGNED_LPO_MAILDID IN NVARCHAR2,
P_FACILTY_TEAMNAME IN NVARCHAR2,
P_FACILITY_TEAMNO IN NVARCHAR2,
P_STATE_HEAD_OPS_NAME IN NVARCHAR2,
P_STATE_HEAD_OPS_NO IN NVARCHAR2,
P_LPA IN NVARCHAR2,
P_SLP_STATE_HEAD IN NVARCHAR2,
P_SLP_STATE_HEAD_NO IN NVARCHAR2,
P_CREATED_BY IN NVARCHAR2,
P_CREATED_DATE IN DATE,
P_LAST_UPDATED_BY IN NVARCHAR2,
P_LAST_UPDATED_DATE IN DATE,
P_ISACTIVE IN CHAR,
P_LATITUDE IN NUMBER,
P_LONGITUDE IN NUMBER,
TBLDATA OUT NUMBER
)
AS
V_RRSOC_ID NUMBER:=0;
BEGIN
SELECT COUNT(RRSOC_ID) INTO V_RRSOC_ID FROM TBL_RRSOC_STORE_INFO WHERE STORE_CODE = P_STORE_CODE;
IF V_RRSOC_ID > 0 THEN
UPDATE TBL_RRSOC_STORE_INFO
SET
STATE = P_STATE,
CITY = P_CITY,
SITE_STORE_FORMAT = P_SITE_STORE_FORMAT,
STORE_SITENAME = P_STORE_SITENAME,
STORE_SITENAME_LANDL_1 = P_STORE_SITENAME_LANDL_1,
STORE_SITENAME_LANDL_2 = P_STORE_SITENAME_LANDL_2,
STORE_ASST_MANAGER_NAME = P_STORE_ASST_MANAGER_NAME,
STORE_ASST_MANAGER_MOBNO = P_STORE_ASST_MANAGER_MOBNO,
STORE_MANAGER_NAME = P_STORE_MANAGER_NAME,
MANAGER_MOBNO = P_MANAGER_MOBNO,
EMP_NEAREST_STORE = P_EMP_NEAREST_STORE,
EMP_NEAREST_STORE_MOBNO = P_EMP_NEAREST_STORE_MOBNO,
SUPERVISOR_NAME = P_SUPERVISOR_NAME,
SUPERVISOR_MOBNO = P_SUPERVISOR_MOBNO,
SECURITY_SUP_NAME_STORE = P_SECURITY_SUP_NAME_STORE,
SECURITY_SUP_MOBNO_STORE = P_SECURITY_SUP_MOBNO_STORE,
NAME_ALIGNED_LPO = P_NAME_ALIGNED_LPO,
LPO_MOBILENO = P_LPO_MOBILENO,
ALPM_ALPO_NAME = P_ALPM_ALPO_NAME,
ALPM_ALPO_MOBNO = P_ALPM_ALPO_MOBNO,
AREA_MANAGER_NAME = P_AREA_MANAGER_NAME,
AREA_MANAGER_MOBNO = P_AREA_MANAGER_MOBNO,
ZONAL_HEAD_NAME =P_ZONAL_HEAD_NAME,
ZONAL_HEAD_NO = P_ZONAL_HEAD_NO,
DVR_IP_ADDRESS = P_DVR_IP_ADDRESS,
SIGNET_IP_ADDRESS = P_SIGNET_IP_ADDRESS,
NEAREST_POLICE_STN_NAME = P_NEAREST_POLICE_STN_NAME,
NEAREST_POLICE_STN_CONTNO = P_NEAREST_POLICE_STN_CONTNO,
NEAREST_HOSP_NAME = P_NEAREST_POLICE_STN_NAME,
NEAREST_HOSP_CONTNO = P_NEAREST_HOSP_CONTNO,
NEAREST_FIRE_STN_CONTNAME = P_NEAREST_FIRE_STN_CONTNAME,
NEAREST_FIRE_STN_CONTNO = P_NEAREST_FIRE_STN_CONTNO,
STORE_ADDRESS = P_STORE_ADDRESS,
STORE_SPACE_SQFT = P_STORE_SPACE_SQFT,
-- LAUNCH_DATE = P_LAUNCH_DATE,
LAUNCH_DATE = TO_DATE(P_LAUNCH_DATE, 'DD-MM-RR'),
CST_TIN_NO = P_CST_TIN_NO,
STORE_EMAILID = P_STORE_EMAILID,
NO_OF_POS = P_NO_OF_POS,
NO_OF_CAMERA = P_NO_OF_CAMERA,
DVR_MODEL_GESECURITY = P_DVR_MODEL_GESECURITY,
CAMERA_MODEL = P_CAMERA_MODEL,
ALIGNED_LPO_MAILDID = P_ALIGNED_LPO_MAILDID,
FACILTY_TEAMNAME = P_FACILTY_TEAMNAME,
FACILITY_TEAMNO = P_FACILITY_TEAMNO,
STATE_HEAD_OPS_NAME = P_STATE_HEAD_OPS_NAME,
STATE_HEAD_OPS_NO = P_STATE_HEAD_OPS_NO,
LPA = P_LPA,
SLP_STATE_HEAD = P_SLP_STATE_HEAD,
SLP_STATE_HEAD_NO = P_SLP_STATE_HEAD_NO,
CREATED_BY = P_CREATED_BY,
CREATED_DATE = SYSDATE,
LAST_UPDATED_BY = P_LAST_UPDATED_BY,
LAST_UPDATED_DATE = SYSDATE,
ISACTIVE = P_ISACTIVE,
LATITUDE = P_LATITUDE,
LONGITUDE = P_LONGITUDE
WHERE STORE_CODE = P_STORE_CODE;
--RETURNING RRSOC_ID INTO TBLDATA;
SELECT RRSOC_ID INTO TBLDATA FROM TBL_RRSOC_STORE_INFO WHERE STORE_CODE = P_STORE_CODE;
ELSE
INSERT INTO TBL_RRSOC_STORE_INFO
(
STORE_CODE,
STATE,
CITY,
SITE_STORE_FORMAT,
STORE_SITENAME,
STORE_SITENAME_LANDL_1,
STORE_SITENAME_LANDL_2,
STORE_ASST_MANAGER_NAME,
STORE_ASST_MANAGER_MOBNO,
STORE_MANAGER_NAME,
MANAGER_MOBNO,
EMP_NEAREST_STORE,
EMP_NEAREST_STORE_MOBNO,
SUPERVISOR_NAME,
SUPERVISOR_MOBNO,
SECURITY_SUP_NAME_STORE,
SECURITY_SUP_MOBNO_STORE,
NAME_ALIGNED_LPO,
LPO_MOBILENO,
ALPM_ALPO_NAME,
ALPM_ALPO_MOBNO,
AREA_MANAGER_NAME,
AREA_MANAGER_MOBNO,
ZONAL_HEAD_NAME,
ZONAL_HEAD_NO,
DVR_IP_ADDRESS,
SIGNET_IP_ADDRESS,
NEAREST_POLICE_STN_NAME,
NEAREST_POLICE_STN_CONTNO,
NEAREST_HOSP_NAME,
NEAREST_HOSP_CONTNO,
NEAREST_FIRE_STN_CONTNAME,
NEAREST_FIRE_STN_CONTNO,
STORE_ADDRESS,
STORE_SPACE_SQFT,
LAUNCH_DATE,
CST_TIN_NO,
STORE_EMAILID,
NO_OF_POS,
NO_OF_CAMERA,
DVR_MODEL_GESECURITY,
CAMERA_MODEL,
ALIGNED_LPO_MAILDID,
FACILTY_TEAMNAME,
FACILITY_TEAMNO,
STATE_HEAD_OPS_NAME,
STATE_HEAD_OPS_NO,
LPA,
SLP_STATE_HEAD,
SLP_STATE_HEAD_NO,
CREATED_BY,
CREATED_DATE,
LAST_UPDATED_BY,
LAST_UPDATED_DATE,
ISACTIVE,
LATITUDE,
LONGITUDE
)
VALUES
(
P_STORE_CODE,
P_STATE,
P_CITY,
P_SITE_STORE_FORMAT,
P_STORE_SITENAME,
P_STORE_SITENAME_LANDL_1,
P_STORE_SITENAME_LANDL_2,
P_STORE_ASST_MANAGER_NAME,
P_STORE_ASST_MANAGER_MOBNO,
P_STORE_MANAGER_NAME,
P_MANAGER_MOBNO,
P_EMP_NEAREST_STORE,
P_EMP_NEAREST_STORE_MOBNO,
P_SUPERVISOR_NAME,
P_SUPERVISOR_MOBNO,
P_SECURITY_SUP_NAME_STORE,
P_SECURITY_SUP_MOBNO_STORE,
P_NAME_ALIGNED_LPO,
P_LPO_MOBILENO,
P_ALPM_ALPO_NAME,
P_ALPM_ALPO_MOBNO,
P_AREA_MANAGER_NAME,
P_AREA_MANAGER_MOBNO,
P_ZONAL_HEAD_NAME,
P_ZONAL_HEAD_NO,
P_DVR_IP_ADDRESS,
P_SIGNET_IP_ADDRESS,
P_NEAREST_POLICE_STN_NAME,
P_NEAREST_POLICE_STN_CONTNO,
P_NEAREST_HOSP_NAME,
P_NEAREST_HOSP_CONTNO,
P_NEAREST_FIRE_STN_CONTNAME,
P_NEAREST_FIRE_STN_CONTNO,
P_STORE_ADDRESS,
P_STORE_SPACE_SQFT,
P_LAUNCH_DATE,
P_CST_TIN_NO,
P_STORE_EMAILID,
P_NO_OF_POS,
P_NO_OF_CAMERA,
P_DVR_MODEL_GESECURITY,
P_CAMERA_MODEL,
P_ALIGNED_LPO_MAILDID,
P_FACILTY_TEAMNAME,
P_FACILITY_TEAMNO,
P_STATE_HEAD_OPS_NAME,
P_STATE_HEAD_OPS_NO,
P_LPA,
P_SLP_STATE_HEAD,
P_SLP_STATE_HEAD_NO,
P_CREATED_BY,
SYSDATE,
P_LAST_UPDATED_BY,
SYSDATE,
P_ISACTIVE,
P_LATITUDE,
P_LONGITUDE
)
RETURNING RRSOC_ID INTO TBLDATA;
END IF;
日期没有格式-它以(表示年、月、日、小时、分钟和秒)的形式存储在数据库内部,直到您使用的任何用户界面(例如SQL/Plus、SQL Developer、Java等)尝试将其显示给用户,并将其转换为您认为有意义的内容(通常是字符串)日期有一个格式 如果要为过程提供格式化日期,则该日期将是字符串,Oracle将尝试使用
NLS\u date\u FORMAT
会话参数将其隐式转换为日期:
UPDATE your_table
SET your_date_column = '18-06-14'; -- or equivalently via a bind parameter
隐式转换为
UPDATE your_table
SET your_date_column = TO_DATE(
'18-06-14',
( SELECT value
FROM NLS_SESSION_PARAMETERS
WHERE parameter = 'NLS_DATE_FORMAT' )
);
如果NLS_DATE_格式不匹配
,则Oracle将引发异常(参数可由每个用户设置,因此您不应依赖它的一致性,尤其是在国际组织中,默认日期格式取决于您的地区和语言)
如果要更新值,请使用日期
文字,而不是字符串:
UPDATE your_table
SET your_date_column = DATE '2014-06-18';
或显式转换字符串并提供格式模型:
UPDATE your_table
SET your_date_column = TO_DATE( '18-06-14', 'DD-MM-RR' );
将参数传递给函数也是如此。使用日期
文字:
BEGIN
your_procedure(
p_launch_date => DATE '2014-06-18'
);
END;
/
或者显式地将字符串转换为日期(并且不依赖于隐式转换):
列的数据类型是什么?参数的数据类型是什么?提示:它们应该是相同的。请回答您的问题,并向我们展示完整的程序。请@GordonLinoff:数据类型是
date
,我正在使用它来满足我的需求。是的,数据类型是相同的P_LAUNCH_DATE IN DATE,
那么错误是来自过程还是来自对过程的调用(来自参数的隐式/显式转换)?显示您如何调用过程,以及过程本身、表定义和完整的错误堆栈。@AlexPoole:我已经更新了我的问题,看一看我是这样尝试的,LAUNCH\u DATE=TO\u DATE(P\u LAUNCH\u DATE,'DD-MM-RR'),
但仍然给出相同的错误。我还更新了问题的程序。有一个look@VVVV您正在将日期
传递到过程中-无需将其转换为更新
或插入
语句中的日期。相反,您需要做的是确保在调用过程时,P_LAUNCH_DATE
参数作为日期传递,而不是作为将被隐式转换的字符串传递。请参阅在文本框中绑定日期时,我通过json绑定它。所以这里有一个主要问题,请建议我现在应该做什么?@vvv修复解析JSON并调用过程来传递日期而不是字符串的服务器端脚本。
BEGIN
your_procedure(
p_launch_date => TO_DATE( '18-06-14', 'DD-MM-RR' )
);
END;
/