bulk/batch 中的参数绑定在存储过程中插入
Parameters binding in bulk/batch insert within stored procedure
我在 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
我在 the documents 中找不到输入多行的示例。如果您想使用多个值,则可以使用以下语法:
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;
$$
;
如您所见,我删除了绑定中多余的括号,并在第二行的值部分添加了一个新的“(?,?)”。
试试这个解决方法:
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
$$
想法是展平数组,然后动态附加正确数量的占位符。
我在 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
我在 the documents 中找不到输入多行的示例。如果您想使用多个值,则可以使用以下语法:
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;
$$
;
如您所见,我删除了绑定中多余的括号,并在第二行的值部分添加了一个新的“(?,?)”。
试试这个解决方法:
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
$$
想法是展平数组,然后动态附加正确数量的占位符。