雪花存储过程错误 'Invalid data type [VARCHAR(5)] for predicate [?] '
Snowflake stored procedure error 'Invalid data type [VARCHAR(5)] for predicate [?] '
我运行在 Snowflake 上使用这个存储过程,但我收到这个错误“"Execution error in store procedure READ_RESULT_SET: SQL compilation error: Invalid data type [VARCHAR(5)] for predicate [?] At Statement.execute, line 12 position 19"”
表格信息:
Table1.header = [段, 条件], Table1.column1 = [aaa,bbb,ccc,ddd], Table1.column2 = [ A=1, B=1, C=1, D=1]
Table2.header = [A, B, C, D], Table2.column1 = [1,0,0,0], Table2.column2 = [1,0,1,0], Table2 .column3 = [0,0,0,0], Table2.column4 = [0,1,0,0]
我正在尝试从 Table1 中获取 column2 和 运行 那些作为我在第二个查询中的条件。如果我复制相同的条件并手动将它们添加到查询中,它会完美地工作。
create or replace procedure read_result_set()
returns float not null
language javascript
as
$$
var my_sql_command = "select * from TABLE1";
var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
var result_set1 = statement1.execute();
// Loop through the results, processing one row at a time...
var result = 0
while (result_set1.next()) {
var condition = result_set1.getColumnValue(2);
stmt = snowflake.createStatement( { sqlText: "select * from TABLE2 where ?;",binds:[condition] } ); ###THE PROBLEM IS IN THIS LINE
//stmt = snowflake.createStatement( { sqlText: "select * from TABLE2 where A = 1;" } ); ####If I try this line instead, it works perfect
res = stmt.execute();
while (res.next()) {
var one = res.getColumnValue(1);
var two = res.getColumnValue(2);
var three = res.getColumnValue(3);
var four = res.getColumnValue(4);
stmt2 = snowflake.createStatement( { sqlText: "INSERT INTO RESULT VALUES (?, ?, ?, ?);", binds:[one, two, three, four, one] } );
res2 = stmt2.execute();
}
//res.next();
//returned_value = res.getColumnValue(1);
}
return 0.0; // Replace with something more useful.
$$
;
call READ_RESULT_SET()
您的绑定未设置为表达式,而是设置为字符串。
您期待 WHERE A = 1
你得到了什么 WHERE 'A = 1'
您可以尝试使用连接而不是绑定、更改 table1 中的数据,或者使用子字符串或正则表达式模式匹配函数仅解析 column2 中的值。
我运行在 Snowflake 上使用这个存储过程,但我收到这个错误“"Execution error in store procedure READ_RESULT_SET: SQL compilation error: Invalid data type [VARCHAR(5)] for predicate [?] At Statement.execute, line 12 position 19"”
表格信息: Table1.header = [段, 条件], Table1.column1 = [aaa,bbb,ccc,ddd], Table1.column2 = [ A=1, B=1, C=1, D=1]
Table2.header = [A, B, C, D], Table2.column1 = [1,0,0,0], Table2.column2 = [1,0,1,0], Table2 .column3 = [0,0,0,0], Table2.column4 = [0,1,0,0]
我正在尝试从 Table1 中获取 column2 和 运行 那些作为我在第二个查询中的条件。如果我复制相同的条件并手动将它们添加到查询中,它会完美地工作。
create or replace procedure read_result_set()
returns float not null
language javascript
as
$$
var my_sql_command = "select * from TABLE1";
var statement1 = snowflake.createStatement( {sqlText: my_sql_command} );
var result_set1 = statement1.execute();
// Loop through the results, processing one row at a time...
var result = 0
while (result_set1.next()) {
var condition = result_set1.getColumnValue(2);
stmt = snowflake.createStatement( { sqlText: "select * from TABLE2 where ?;",binds:[condition] } ); ###THE PROBLEM IS IN THIS LINE
//stmt = snowflake.createStatement( { sqlText: "select * from TABLE2 where A = 1;" } ); ####If I try this line instead, it works perfect
res = stmt.execute();
while (res.next()) {
var one = res.getColumnValue(1);
var two = res.getColumnValue(2);
var three = res.getColumnValue(3);
var four = res.getColumnValue(4);
stmt2 = snowflake.createStatement( { sqlText: "INSERT INTO RESULT VALUES (?, ?, ?, ?);", binds:[one, two, three, four, one] } );
res2 = stmt2.execute();
}
//res.next();
//returned_value = res.getColumnValue(1);
}
return 0.0; // Replace with something more useful.
$$
;
call READ_RESULT_SET()
您的绑定未设置为表达式,而是设置为字符串。
您期待 WHERE A = 1
你得到了什么 WHERE 'A = 1'
您可以尝试使用连接而不是绑定、更改 table1 中的数据,或者使用子字符串或正则表达式模式匹配函数仅解析 column2 中的值。