【问题标题】:Passing Variable to Snowflake Procedure将变量传递给雪花过程
【发布时间】:2021-12-08 14:31:20
【问题描述】:

我正在雪花中编写存储过程,其中我有几行带有多个连接的选择语句。所以我需要为每个数据库模式使用变量。我尝试将以下代码作为实验进行试验,但无法使其正常工作。有人可以建议如何传递变量。

CREATE OR REPLACE PROCEDURE test_proc(tmpschema VARCHAR, dbschema VARCHAR)
RETURNS VARCHAR
LANGUAGE JAVASCRIPT
AS
$$
/* Load STARTED */
    try{
        snowflake.createStatement({sqlText:`TRUNCATE TABLE '${dbschema}'.TAB1`}).execute();
        snowflake.createStatement({sqlText:`TRUNCATE TABLE '${tmpschema}'.TAB2`}).execute();
        }
    catch(err){
        return 'Failed Truncating TMP tables: ' + err;
        }
$$
;

上面的代码已经成功创建了程序,但是调用却抛出了一个错误。

call BIGDATA.test_proc('TMP', 'DB');
Error: Failed Truncating TMP tables:: ReferenceError: dbschema is not defined

【问题讨论】:

    标签: snowflake-cloud-data-platform snowflake-schema


    【解决方案1】:

    在 SQL 和 JS 之间移动时,您必须注意变量的大小写。

    这重现了问题:

    CREATE OR REPLACE PROCEDURE test_proc(x VARCHAR)
    RETURNS VARCHAR
    LANGUAGE JAVASCRIPT
    AS
    $$
    `${x}`
    $$
    ;
    
    call test_proc('')
    ;
    
    -- 100132 (P0000): JavaScript execution error: Uncaught ReferenceError: x is not defined in TEST_PROC at '`${x}`' position 0
    
    

    这解决了问题(X):

    CREATE OR REPLACE PROCEDURE test_proc(x VARCHAR)
    RETURNS VARCHAR
    LANGUAGE JAVASCRIPT
    AS
    $$
    `${X}`
    $$
    

    这也解决了它("x"):

    CREATE OR REPLACE PROCEDURE test_proc("x" VARCHAR)
    RETURNS VARCHAR
    LANGUAGE JAVASCRIPT
    AS
    $$
    `${x}`
    $$
    

    【讨论】:

    猜你喜欢
    • 2021-06-19
    • 1970-01-01
    • 2021-11-23
    • 2016-07-14
    • 1970-01-01
    • 2020-03-17
    • 2020-07-13
    • 2022-10-13
    • 2011-09-15
    相关资源
    最近更新 更多