传递变量给雪花过程



我在snowflake中编写存储过程,其中我有几行具有多个连接的选择语句。所以我需要为每个数据库模式使用变量。我试着用下面的代码作为实验,但不能使它工作。谁能告诉我如何传递变量。

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

在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}`
$$

相关内容

  • 没有找到相关文章

最新更新