Stored procedures 在SAP HANA存储过程中添加截止日期

Stored procedures 在SAP HANA存储过程中添加截止日期,stored-procedures,sap,hana,hana-sql-script,Stored Procedures,Sap,Hana,Hana Sql Script,我需要在HANA存储过程中添加日期,但收到错误消息 分析日期/时间时出错 我使用此语句,其中p_end_date是存储过程的参数 v_end_date_plus := add_days (TO_DATE(' || p_end_date || ' , 'YYYY-MM-DD' ), 90) 有没有其他方法或者我做错了什么?p\u end\u date应该是一个varchar字段,或者是您的技术中使用的适当的字符串文字。它不应该用引号括起来 v_end_date_plus := add_days

我需要在HANA存储过程中添加日期,但收到错误消息

分析日期/时间时出错

我使用此语句,其中
p_end_date
是存储过程的参数

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

有没有其他方法或者我做错了什么?

p\u end\u 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
,而不是按照默认设置,那么它应该是字符串文字(Oracle中的varchar)

编辑:

这个答案的本质只是建议变量应该作为varchar传递。借用Lars Br下面的建议修改p_end_date变量的语法:

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

即使您没有公布收到的错误,我想代码中的问题是您引用输入变量的方式

v_end_date_plus := add_days ( :p_end_date , 90);

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

@LarsBr。正确的做法是,您需要一个冒号(:)来引用变量,如果它确实是日期类型,则不需要再次转换为_DATE

但是,另外,在您的示例中,引号和连接有一些混淆,这使我认为您实际上想要使用p_end_date构造一些字符串。这需要先转换为日期:

p_end_date:=“2016-05-03”;——例如
v_end_date_plus:=增加天数(至日期(:p_end_date,'YYYY-MM-DD'),90);
示例中的部分
“|p|u end|u date”
看起来也有点像整个代码实际上是要在EXEC或类似程序中使用的字符串的一部分。如果是这种情况,则两个参数都需要转义单引号,例如

exec'v|u end|u date_plus:=添加_天(至|u date('''''.'p|u end|u date',''yyyyy-MM-DD''),90天);

Oracle和SAP HANA在脚本语言方面有很大不同。在这种情况下,类比解释是不起作用的。@LarsBr.,好的,注意要点。那么,我们确定这个扩展的类比在这种情况下不起作用吗?快速浏览后,我发现HANA中也存在类似的语法。@user4836066,如果您尝试过,但我的解决方案不起作用,请在此处说明。然后我会删除答案。Oracle语法解决方案在SAP HANA上不起作用。SAP HANA中没有DBMS_输出,等效于DUAL的是虚拟的,要使用变量,冒号必须到位。因此,从技术上讲,您的解决方案不起作用。但据我所知,主要的问题不是日期格式解析,而是语法错误。你应该发布错误消息。