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