我是HANA Studio的新手,请原谅。
我在SAP HANA Studio中创建功能时遇到错误。这是我的功能:
CREATE FUNCTION "PAYROLLDBTEST".GetAbsenteeismDays
(
-- Add the parameters for the function here
EmpID integer,
StartDate Datetime,
EndDate Datetime
)
RETURNS AbsDays float
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
AS
AbsDays float;
BEGIN
(SELECT SUM(DATEDIFF(DAY, "fromDate", "toDate") + 1) AS AbsentDays into AbsDays
FROM HEM1
WHERE "empID" = :EmpID AND "fromDate" BETWEEN :StartDate AND :EndDate
AND "toDate" BETWEEN :StartDate AND :EndDate
);
RETURNS AbsDays;
错误:
“无法执行'CREATE FUNCTION”PAYROLLDBTEST“.GetAbsenteeismDays ( - 在此处添加函数的参数...'在2 ms807μs内。 SAP DBTech JDBC:[257](at 576):sql语法错误:语法不正确 “RETURNS”附近:第23行第1栏(位于第576号)“
答案 0 :(得分:1)
HANA中有两种类型的功能:表格功能和标量功能。
根据SAP HANA SQL脚本参考(SPS 07),不允许在表函数中使用DDL和DML。 标量函数不支持任何类型的SQL语句。
您只返回一个值,而不是一个表,因此您尝试创建一个标量函数。您提到的示例,在标量函数内执行Select语句,不会起作用。但是,您可以轻松创建包含相同功能的过程,而不是创建一个函数(如果您真的只需要获取一个浮点数)。
CREATE PROCEDURE "PAYROLLDBTEST"."GetAbsenteeismDays" (
in EmpID integer,
in StartDate Datetime,
in EndDate Datetime,
out AbsentDays float )
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER
-- DEFAULT SCHEMA <Schema>
READS SQL DATA AS
BEGIN
SELECT SUM(DATEDIFF(DAY, "fromDate", "toDate") + 1) into AbsentDays
FROM HEM1
WHERE "empID" = :EmpID
AND "fromDate" BETWEEN :StartDate AND :EndDate
AND "toDate" BETWEEN :StartDate AND :EndDate
END;
答案 1 :(得分:0)
@ hoffman解决方案的缺点是你不能在投影中使用PROCEDURE
(如WHERE
- 查询的一部分):
SELECT * FROM myTable WHERE "myProcedure"('param') > 5;
给出
cannot use procedure or table function in select projection column
来自HANA 11的标量函数执行支持SQL,因此不再需要PROCEDURE
这里使用<script>
var id = 1;
$( "#new-projects" ).load( "GetDataPeople.php?id=" + id );
</script>
快乐