将JSON变量作为参数传递到Snowflake javascript存储过程中

tct7dpnv  于 2022-11-19  发布在  Java
关注(0)|答案(1)|浏览(147)

我有一个存储的proc,我在其中用值构造JSON,我想将其传递给子proc,更新相同的JSOn变量并将其返回。

CREATE OR REPLACE PROC1()
RETURNS STRING 
LANGUAGE JavaScript

AS
'

--Some functions and constants 

  function execSqlSingleValue(sql_text){
    exec_result = snowflake.execute({sqlText:sql_text});
    exec_result.next();
    return exec_result.getColumnValue(1);
  }

  const column1 = `ABC`;
  const column2 = `DEF`;
  const column3 = `GHL`;

  var v1_json = {
    col1: column1,
    col2: column2,
    col3: column3,
    col4: `NONE`,
    col5: 0,

  }

try{
  return execSqlSingleValue(`CALL PROC2(\'${v1_json}\')`);
  }

  catch(err){
    return JSON.stringify(v1_json);
  }
'
;

CREATE OR REPLACE PROCEDURE PROC2(v1_json VARIANT)

RETURNS STRING 
LANGUAGE JavaScript

AS
'

常数列4 = XYZ;--其他一些计算常数column 5 = MMM;--其他一些计算

v1_json.col4 = `${column4}`;
v1_json.col5 = `${column5}`;

return JSON.stringify(v1_json);

'
;

我试过用VARIANT和VARCHAR来做,但是没有成功。我们如何做到这一点?

mspsb9vt

mspsb9vt1#

您是否尝试过将其转换为字符串,然后在子过程中转换JSON?

snowflake.execute(
            {
            sqlText: "call PROC2(?);",
            binds:[ JSON.stringify(v1_json) ]
            }

在子过程中(v1_json定义为varchar参数):

var json_obj = JSON.parse(v1_json)

相关问题