我需要在hana存储过程中添加日期,但是我收到错误消息
解析日期/时间时出错
v_end_date_plus:=添加日期(TO_DATE('|| p_end_date ||','YYYY-MM-DD'),90)
其中p_end_date是DATE,并且我在调用存储过程时将此值作为参数传递。
[v_end_date_plus
是DATE
变量。
但是运行此程序时出现错误。
还有其他方法或我做错了什么吗?
即使您没有发布收到的错误,我想您代码中的问题也是您引用输入变量的方式。
v_end_date_plus := add_days ( :p_end_date , 90);
将冒号(:)放在参数前面,而不必将其转换为其他数据类型。
@ LarsBr。正确的是,您需要一个冒号(:)来引用该变量,并且如果它确实是DATE类型,则无需再次转换TO_DATE。
但是,在您的示例中,您将引号和串联混合在一起,使我认为您实际上想使用p_end_date构造一些字符串。首先需要将其转换为日期:
p_end_date := '2016-05-03'; -- for example
v_end_date_plus := add_days(TO_DATE( :p_end_date , 'YYYY-MM-DD' ), 90);
示例中的' || p_end_date || '
部分看上去也有点像整个代码实际上是要在EXEC或类似代码中使用的字符串的一部分。如果是这种情况,则需要对两个参数都使用单引号,例如
exec 'v_end_date_plus := add_days(TO_DATE(''' || :p_end_date || ''', ''YYYY-MM-DD'' ), 90)';
p_end_date
应该是varchar字段,或者是技术中使用的适当的字符串文字。它不应该用引号引起来。
v_end_date_plus := add_days (TO_DATE(p_end_date , 'YYYY-MM-DD' ), 90)
使用ORACLE作为参考的原语:
在Oracle数据库中,默认日期格式为dd-MON-RR或dd-MON-YYYY。
因此,如果我对p_end_date变量使用正确的日期格式,则可以获取输出。
但是,如果我偏离此默认格式,我的尝试将出错。
因此,如果我想灵活地以自己选择的格式重新定义p_end_date
,而不是按照默认设置,则应为String文字。(Oracle中的varchar。
编辑:
此答案的本质只是建议变量应作为varchar传递。从Lars Br的以下建议借来修改p_end_date变量的语法:
v_end_date_plus := add_days (TO_DATE(:p_end_date , 'YYYY-MM-DD' ), 90)