由于日期格式,从Apex表单调用Oracle SP时失败

由于日期格式,从Apex表单调用Oracle SP时失败,oracle,oracle-apex,Oracle,Oracle Apex,我有一个表,在其中使用基于输入参数的过程插入和更新数据。该过程是从Oracle APEX表单调用的。 该过程在Oracle中运行良好。但是当我从Apex形式调用它时,我得到了过程失败错误。通过分析,我发现这是因为从Apex form和Oracle传递的值中的日期格式不匹配 Date format in APEX FORM-->16-AUG-2017 ORACLE DB-->2017-08-17中的日期格式 在调用Oracle过程之前,是否需要将输入参数格式化为Apex格式,或者是否需要在

我有一个表,在其中使用基于输入参数的过程插入和更新数据。该过程是从Oracle APEX表单调用的。 该过程在Oracle中运行良好。但是当我从Apex形式调用它时,我得到了过程失败错误。通过分析,我发现这是因为从Apex form和Oracle传递的值中的日期格式不匹配

Date format in APEX FORM-->16-AUG-2017
ORACLE DB-->2017-08-17中的日期格式

在调用Oracle过程之前,是否需要将输入参数格式化为Apex格式,或者是否需要在过程中更改其格式。
请帮忙

APEX将所有项目值视为字符串,例如“2017年8月16日”。如果您正在调用的过程需要一个日期参数,那么您需要在调用它之前转换该值。这对许多人来说都是不利的,但在APEX应用程序中,我很乐意使用隐式转换:

myproc (p_date => to_date(:P1_DATE));
无论APEX中的日期格式设置如何,这都将起作用。另一种方法是使用流行的APEX日期格式执行显式转换,如下所示:

myproc (p_date => to_date(:P1_DATE, :APP_NLS_DATE_FORMAT));
但这对我来说似乎是多余的


当然,如果P1_DATE中的值不是当前APEX DATE格式中的有效日期,则过程调用将失败,因此您应该在调用过程之前验证该值。例如,您可以使用APEX验证来实现这一点。另一种方法是使用APEX过程层,该层将所有值作为字符串接受,使用一些常用实用程序对其进行验证和转换,然后调用主过程。

是否将日期作为数据类型
date
varchar2
的参数传递?最好使用第一个,这样您就可以独立于任何日期格式。您好,我从apex表单到调用DB过程的参数是..#OWNER#。PROC#u REF_ARTICLE _NBR _UPDINSERT(V_VALID_from_DT=>to_CHAR(to_date(:P293_VALID_from_DT,'DD-MON-YYYY'),'yyyyyy-MM-DD'));首先,Oracle DB中没有所谓的日期格式。日期就是日期。您可能会觉得它们不同,因为您使用的客户机采用这种格式。过程中的“V_VALID_FROM_DT”参数是字符还是日期?您正在将其转换为YYYY-MM-DD格式的字符日期。如果该参数是日期,则Oracle可能会不隐式地将其转换回日期,因此会出现错误。嗨,托尼,我尝试了两个选项—'myproc(p_date=>to_date(:P1_date));和'myproc(p_date=>to_date(:P1_date,:APP_NLS_date格式))但两者都不起作用过程仍在失败,会话级别值仍然为“20-AUG-2017”是DATE类型的过程参数?如果是,这将起作用。听起来您的过程需要一个格式化字符串,在这种情况下,您唯一的选择是将日期重新格式化为希望的格式,如
to_char(to_DATE(:P1_DATE),'YYYY-MM-DD')