Snowflake cloud data platform 存储过程中批量/批插入绑定的参数

Snowflake cloud data platform 存储过程中批量/批插入绑定的参数,snowflake-cloud-data-platform,Snowflake Cloud Data Platform,我在SP中遇到了参数绑定和批量插入问题。我不知道为什么它不起作用。根据文件,它应该是有效的 CREATE TABLE TEST( COL1 NUMBER(38,0), COL2 NUMBER(38,0) ); CREATE OR REPLACE PROCEDURE SP_TEST() RETURNS FLOAT NOT NULL LANGUAGE JAVASCRIPT AS $$ var stmt = snowflake.createStatement({ sqlText:

我在SP中遇到了参数绑定和批量插入问题。我不知道为什么它不起作用。根据文件,它应该是有效的

CREATE TABLE TEST(
  COL1 NUMBER(38,0),
  COL2 NUMBER(38,0)
);

CREATE OR REPLACE PROCEDURE SP_TEST()
RETURNS FLOAT NOT NULL
LANGUAGE JAVASCRIPT
AS $$

var stmt = snowflake.createStatement({
    sqlText: "INSERT INTO TEST(COL1, COL2) VALUES(?, ?)",
    binds: [[1, 2], [3, 4]]
});
stmt.execute();

return 0;
$$
;

CALL SP_TEST();

Execution error in store procedure SP_TEST: Unsupported type for binding 
argument 1,2 At Snowflake.createStatement, line 3 position 22

我找不到在中输入多行的任何示例。如果要使用多个值,则可以使用以下语法:

CREATE OR REPLACE PROCEDURE SP_TEST()
RETURNS FLOAT NOT NULL
LANGUAGE JAVASCRIPT
AS $$

var stmt = snowflake.createStatement({
    sqlText: "INSERT INTO TEST(COL1, COL2) VALUES(?, ?),(?, ?)",
    binds: [1, 2, 3, 4]
});
stmt.execute();

return 0;
$$
;
如您所见,我删除了binds中的额外括号,并添加了一个新的?,?转到第二行的值部分。

尝试以下解决方法:

CREATE PROCEDURE SP_TEST()
RETURNS FLOAT NOT NULL
LANGUAGE JAVASCRIPT
AS $$
    const vals = [[1, 2], [3,4]]
    const binds = vals.reduce((a, b) => a.concat(b))
    const placeholders = vals.map(()=>"(?, ?)").join(",")
    const stmt = snowflake.createStatement({
        sqlText: "INSERT INTO TEST(COL1, COL2) VALUES " + placeholders,
        binds
    })
    stmt.execute()
    return 0
$$

其思想是将数组展平,然后动态附加正确数量的占位符

谢谢你的建议-现在它可以是一个解决方案。关于dosc-在doc:-Binding语句参数中有一个链接,它导航到:用于批量插入的绑定数组。但正如我所看到的,它被标记为node.js,所以它在存储过程中可能不同于js。