Snowflake存储过程:从字符串数组提取列实现ALTER TABLE新增列问题
错误原因
- 字符串拼接语法错误:你在定义
v_sqlCode时混用了JS的模板字符串反引号(`)和普通单引号拼接逻辑,两种语法不兼容,导致生成的SQL语句格式错误无法执行。 - 拆分后的字符串残留空格:按逗号拆分参数后,每个列定义片段首尾会带有多余的空格,直接拼接可能触发SQL语法报错。
- 代码中使用了HTML转义的小于号
<,Snowflake JS存储过程中直接使用<即可。
修正后完整代码
CREATE OR REPLACE PROCEDURE ADD_COLUMNS_CONTEXTUAL_ATTRIBUTES("P_COL_NAME_SPACE_TYPE" VARCHAR(16777216)) RETURNS VARCHAR LANGUAGE JAVASCRIPT COMMENT = 'Turns column string list into array' EXECUTE AS CALLER AS $$ var arr = P_COL_NAME_SPACE_TYPE.split(','); for (i = 0; i < arr.length; i++){ try{ // 先trim去掉首尾空格,再拼接SQL var v_sqlCode = 'ALTER TABLE CONTEXTUAL_ATTRIBUTES ADD COLUMN ' + arr[i].trim(); var sqlStmt = snowflake.createStatement({sqlText : v_sqlCode}); sqlStmt.execute(); }catch(err){ errMessage = "Failed: Code: " + err.code + "\n State: " + err.state; errMessage += "\n Message: " + err.message + ",执行的SQL:" + v_sqlCode; errMessage += "\nStack Trace:\n" + err.stackTraceTxt; throw '执行SQL失败:\n' + errMessage; } }; return "success"; $$; -- 测试调用 CALL ADD_COLUMNS_CONTEXTUAL_ATTRIBUTES('AGE NUMBER, NAME VARCHAR');
优化建议
可以新增参数非空校验逻辑,避免空参数传入时触发不必要的执行异常。
内容的提问来源于stack exchange,提问作者RMC_DEV
相关产品推荐
相关产品推荐

