Snowflake SQL存储过程删除表报错:SQL查询无SELECT语句
问题解决:Snowflake存储过程执行删除表时报错“The SQL query doesn't contain any SELECT statement”
错误原因
当WAREHOUSE.PUBLIC.DATASETS表中无数据时,SELECT LISTAGG(...) INTO exec_sql不会给变量exec_sql赋值,此时exec_sql为NULL。执行EXECUTE IMMEDIATE exec_sql相当于执行空SQL语句,从而触发该错误。
修复后的代码
USE SCHEMA "PUBLIC"; CREATE OR REPLACE PROCEDURE DROP_TABLE() RETURNS VARCHAR LANGUAGE SQL AS $$ DECLARE exec_sql VARCHAR; BEGIN SELECT LISTAGG('DROP TABLE IF EXISTS "' || SF_DATABASE || '"."' || SF_SCHEMA || '"."' || SF_TABLE || '";') WITHIN GROUP (ORDER BY SF_DATABASE, SF_SCHEMA, SF_TABLE) INTO exec_sql FROM WAREHOUSE.PUBLIC.DATASETS; -- 仅当存在要执行的SQL时才执行删除操作 IF (exec_sql IS NOT NULL) THEN EXECUTE IMMEDIATE exec_sql; ELSE RETURN '没有需要删除的表。'; END IF; RETURN exec_sql; END; $$; CALL DROP_TABLE();
关键修改说明
- 新增
exec_sql IS NOT NULL的判断逻辑,避免执行空SQL语句 - 无表可删时返回明确提示,让执行结果更直观
内容的提问来源于stack exchange,提问作者Pedro Caldeira
相关产品推荐
相关产品推荐

