首页 > 解决方案 > 存储过程 SQL 编译错误中的执行错误:Statement.execute 中的标识符“TEST3”无效

问题描述

我在下面创建了存储过程,但是在 where 子句中解析 VAL 时出错,我也尝试过双引号“和 backstick `

create or replace TABLE T1 (
    COL VARCHAR(16777216)
);

insert into t1 values  ('test1');
insert into t1 values  ('test2');
insert into t1 values  ('test3');

create or replace procedure ifcopied(val varchar)
                                   returns varchar
                                   language javascript
                                   execute as caller
                                   as
                                   $$
                                   sql_command = "select * from t1 where col = " + VAL;
                                   var stmt = snowflake.createStatement({sqlText:sql_command});                       
                                   var res = stmt.execute();
                                   res.next();
                                   row_status = res.getColumnValue(1);
                                   return row_status                                   
                                   $$;

call ifcopied('test3')

;

低于错误

Execution error in store procedure IFCOPIED: SQL compilation error: error line 1 at position 29 invalid identifier 'TEST3' At Statement.execute, line 4 position 50

存储过程 IFCOPIED 中的执行错误:SQL 编译错误:位置 29 处的错误第 1 行无效标识符“TEST3”在 Statement.execute 第 4 行位置 50

标签: snowflake-cloud-data-platform

解决方案


除了 Gokhan 所拥有的之外,您还可以通过这种方式执行它。

sql_command = `select * from t1 where col = '${VAL}';`

这可以减少您对连接的使用,并允许您查看变量。


推荐阅读