【发布时间】:2020-10-08 12:50:55
【问题描述】:
我在这个博客上创建了一个简历,就像这个“前成员”一样 https://blogs.sap.com/2017/05/18/factory-calendar-transpose-in-sap-hana-studio-step-by-step/
它就像一个魅力!
我的下一个要求是为每条记录获取 DATE_SAP 并确定会计月末;是的,我知道该值将在 30 天内保持不变。
我有一个可以工作的函数,可以为我提供会计月结束日期,但我似乎无法确定如何使其与我创建的 HANA CV 视图一起工作。
提前非常感谢!
这里是函数
CREATE FUNCTION "MY_SCHEMA"."FN_DTACCTMONTHEND"
(
-- Add the parameters for the function here
dtexp date
)
RETURNS dtwkend date
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS
BEGIN
-- Declare the return variable here
DECLARE dttemp date;
declare cnt int;
declare c_dtwkend date;
Select ADD_DAYS(to_date('19000107', 'YYYYMMDD'),(FLOOR((days_between(to_date('19000107', 'YYYYMMDD'),:dtexp) / 7)) * 7) + 7) into c_dtwkend from dummy;
cnt := 0;
while :cnt < 6 DO
dttemp := add_days(:c_dtwkend,7);
if MONTHNAME(:dttemp) = MONTHNAME(:c_dtwkend) then
c_dtwkend := dttemp;
else
dtwkend := to_date(c_dtwkend);
return;
end if;
cnt := :cnt + 1;
end while;
-- Return the result of the function
dtwkend := to_date(c_dtwkend);
return;
END;
这里是表格函数:
CREATE FUNCTION "SCHEMA_NAME"."SCHEMA_NAME::FN_DTACCTMONTHEND_TEST" (DATE_SAP date )
RETURNS TABLE (DTWKEND date)
LANGUAGE SQLSCRIPT
SQL SECURITY INVOKER AS
BEGIN
DECLARE dttemp date;
DECLARE cnt int;
DECLARE c_dtwkend date;
DECLARE dtwkend date;
Select ADD_DAYS(to_date('19000107', 'YYYYMMDD'),(FLOOR((days_between(to_date('19000107', 'YYYYMMDD'),:DATE_SAP) / 7)) * 7) + 7) into c_dtwkend
from dummy;
cnt := 0;
while :cnt < 6 DO
dttemp := add_days(:c_dtwkend,7);
if MONTHNAME(:dttemp) = MONTHNAME(:c_dtwkend) then
c_dtwkend := dttemp;
else
dtwkend := to_date(c_dtwkend);
return;
end if;
cnt := :cnt + 1;
end while;
-- Return the result of the function
dtwkend := to_date(c_dtwkend);
RETURN
SELECT dtwkend from dummy;
END;
收到的错误是 SAP DBTech JDBC:[2]:一般错误:应为表函数定义带有表达式的 RETURN 语句
【问题讨论】:
-
函数中是否需要使用CV中的列?如果您使用 XSA,则可以将 TF 集成到 CV 中。否则,您必须在侧面计算并加入或在 CV 之上(将 CV 作为表函数的输入参数)。
-
是的,我想使用我用来制作工厂日历的 CV 输出中的 DATE_SAP。我在 Hana 中创建了一个 TF,但我看到的只是你可以在 TF 中执行某些功能,例如插入或循环,这是查找 CV 中每个日期的会计月末所必需的
-
然后可以从CV中选择TF中的相关列。在 TF 中计算,将输出添加到更多视图。在 2.0 中会容易得多,因为您可以在 1 个 CV 内完成所有操作,并将 CV 节点作为 TF 的输入和输出。
-
对不起,我的意思是说您不能在 TF 中执行“插入”或循环之类的功能,如果您查看了上述问题中的功能,则需要这样做。
-
您可以在 TF 中使用循环和选择进入。您不能使用 ddl 或 dml 操作(INSERT、UPDATE、DELETE)。
标签: hana hana-sql-script