2016-04-28 68 views
0

我需要几天添加日期哈纳存储过程,但我收到错误消息需要的天数在SAP HANA添加日期存储过程

错误,而解析日期/时间

v_end_date_plus:= add_days(TO_DATE( '|| || p_end_date', 'YYYY-MM-DD'),90)

其中p_end_date是DATE和我传递该值作为参数而调用存储过程。

v_end_date_plus是一个DATE变量。

但我在运行时遇到错误。

是否有其他方式或我在做什么错?

+0

您应该发布错误消息。 – Hannobo

回答

-1

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变量,我能够获得输出。 enter image description here

但是,如果我偏离这种默认格式,我的尝试会出错。

enter image description here

所以,如果我想的灵活性,重新定义p_end_date在我选择的格式,而不是按照默认的设置,它应该是一个字符串文字。(VARCHAR在Oracle中)。

编辑:

这个答案的实质只是为了表明变量应为VARCHAR传递。从下面拉斯溴的建议借用修改p_end_date变量的语法:

v_end_date_plus := add_days (TO_DATE(:p_end_date , 'YYYY-MM-DD'), 90) 
+0

Oracle和SAP HANA在脚本语言方面有很大的不同。在这种情况下,用比喻解释不起作用。 –

+0

@LarsBr。,好的,指出。那么我们确定这种扩展的比喻在这种情况下是行不通的吗?快速浏览告诉我,HANA中存在类似的语法。 –

+0

@ user4836066,如果您尝试过并且我的解决方案无法正常工作,请在此处声明。然后我会删除答案。 –

1

即使你没有张贴您会收到什么样的错误,我想在你的代码的问题是你提到你的输入变量的方式。

v_end_date_plus := add_days (:p_end_date , 90); 

使用参数前面的冒号(:),您应该可以使用它而不必将其转换为不同的数据类型。

0

@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)';