【发布时间】:2023-04-03 11:22:01
【问题描述】:
我的存储过程应该通过 UDF 将数据插入到表中。
我生成的字符串当我作为SQL语句运行时是正确的,但是当我通过存储过程执行它时,它会抛出一个语法错误。
这是 SQL 语句:
insert into dbname.public.TBLPROVIDER
select *
from table(f_TBLPROVIDER('dbname',cast('20211031233226' as bigint)));
这是存储过程失败的代码
var sql_tbl_populate = "insert into " + S_DB_NAME + ".public." + TBL_NAME + " "
sql_tbl_populate += "select * from table(f_" + TBL_NAME +"('"+ S_DB_NAME + "',cast('" + S_TIMESTAMP + "' as bigint)));"
stmt_sql_tbl_populate = snowflake.createStatement({sqlText: sql_tbl_populate} );
stmt_sql_tbl_populate.execute();
错误是
存储过程 SP_POPULATE_TRGT_TABLES 中的执行错误:SQL 编译错误:位置 105 的语法错误第 1 行意外“dbname”。
在 Statement.execute 第 21 行位置 23
【问题讨论】:
-
请检查 SQL 历史以查看从 SP 中使用的代码生成的确切命令。示例如下: var sql_tbl_populate = snowflake.createStatement({ sqlText: "INSERT INTO TABLE1 VALUES('" + TABLE_NAME + "','" + cols[i] + "')" + ";" }) ;
-
您能否将整个过程添加到问题中?
-
调试存储过程的一种方法是在执行之前从过程中返回 SQL 语句,例如。在调用 snowflake.createStatement 之前从过程中返回 sql_tbl_populate 并注释掉该语句之后的所有内容。
标签: sql stored-procedures snowflake-cloud-data-platform