Snowflake cloud data platform 关于在Snowflake中的函数中嵌套多个函数的问题
(代表雪花用户提交…)Snowflake cloud data platform 关于在Snowflake中的函数中嵌套多个函数的问题,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,(代表雪花用户提交…) 问题: 是否可以在一个函数中嵌套多个函数,并传递所需的所有参数 例如 CREATE OR REPLACE FUNCTION "udf_InteractionIndicator"("ROH_RENEWAL_SYSTEM_STATUS1" VARCHAR(100), "GOLS_OPPORTUNITY_LINE_STATUS" VARCHAR(100) , "ROH_CLIENT_CURRENT_TEMPERATUR
问题: 是否可以在一个函数中嵌套多个函数,并传递所需的所有参数 例如
CREATE OR REPLACE FUNCTION "udf_InteractionIndicator"("ROH_RENEWAL_SYSTEM_STATUS1" VARCHAR(100), "GOLS_OPPORTUNITY_LINE_STATUS" VARCHAR(100)
, "ROH_CLIENT_CURRENT_TEMPERATURE1" VARCHAR(100)
, "ROH_PO_ATTACHED" VARCHAR(100)
, "ROH_PO_NUMBER" VARCHAR(100)
, "RT_PAID_OVERRIDE" VARCHAR(100), "ROH_RENEWAL_OPPORTUNITY_STATUS1" VARCHAR(100)
, "ROH_RENEWAL_CONVERSATION_DATE" DATE, "ROH_APPROVAL_RECEIVED_DATE" DATETIME)
RETURNS NUMBER(1,0)
AS
$$
CASE WHEN ("udf_RenewalNoticeSentIndicator"("ROH_RENEWAL_SYSTEM_STATUS1", "ROH_CLIENT_CURRENT_TEMPERATURE1"
, "GOLS_OPPORTUNITY_LINE_STATUS"
, "ROH_PO_ATTACHED", "RT_PAID_OVERRIDE"
, "ROH_RENEWAL_OPPORTUNITY_STATUS1")) = 1
AND (ROH_RENEWAL_CONVERSATION_DATE IS NOT NULL
OR ("udf_AuthorizedIndicator"(ROH_APPROVAL_RECEIVED_DATE, "ROH_PO_ATTACHED", "ROH_PO_NUMBER")) = 1
OR ("udf_PaidIndicator"("GOLS_OPPORTUNITY_LINE_STATUS")) = 1
OR ("udf_ChurnIndicator"("GOLS_OPPORTUNITY_LINE_STATUS")) = 1
)
THEN 1 ELSE 0 END
$$
;
我已收到以下建议:
…创建SQL自定义项或JavaScript自定义项。JavaScript UDF只能
包含JavaScript代码,并且SQLUDF只能包含一个SQL
语句(无DML和DDL)。在嵌套的情况下,SQL UDF可以调用
另一个SQL UDF或JavaScript UDF,但对于
JavaScript UDF(它只包含JavaScript代码)
创建或替换嵌套的函数udf\u InteractionIndicator\u(ID双精度)
双倍回报
作为
$$
选择ID
$$;
创建或替换函数js_factorial(d double)
双倍回报
语言javascript
严格的
正如
如果(D(我们社区的一位顾问提供了以下答案…)
如果您的用例是有一个“main”函数将工作分解为子函数,而子函数只能从main调用,那么使用JavaScript UDF,设计将更加紧凑和可维护
然后,您只需在主函数中定义所有底层函数,这在JavaScript中是可能的,但在SQL UDF中是不可能的,然后您就可以在任何地方自由地使用主参数
CREATE OR REPLACE FUNCTION MAIN_JS(P1 STRING, P2 FLOAT)
RETURNS FLOAT
LANGUAGE JAVASCRIPT
AS '
function helper_1(p) { return p * 2; }
function helper_2(p) { return p == "triple" ? P2 * 3 : P2; }
return helper_1(P2) + helper_2(P1);
';
SELECT MAIN_JS('triple', 4); -- => 20
CREATE OR REPLACE FUNCTION MAIN_JS(P1 STRING, P2 FLOAT)
RETURNS FLOAT
LANGUAGE JAVASCRIPT
AS '
function helper_1(p) { return p * 2; }
function helper_2(p) { return p == "triple" ? P2 * 3 : P2; }
return helper_1(P2) + helper_2(P1);
';
SELECT MAIN_JS('triple', 4); -- => 20