PostgreSQL动态查询执行报错:如何通过输入表名统计行数?
解决PostgreSQL动态查询函数中EXECUTE的SELECT ... INTO错误
错误原因
你遇到的问题是PL/pgSQL中EXECUTE语句的语法使用错误:SELECT ... INTO的INTO子句不能嵌入到动态SQL字符串内部,它需要作为EXECUTE命令的一部分单独声明。
修正后的基础版本
将INTO c从动态SQL字符串中移出,放在EXECUTE之后:
create or replace function func_execute_query_4(table_name varchar) returns integer as $$ declare c integer; begin execute 'select count(*) from ' || table_name into c; return c; end $$ language plpgsql; select func_execute_query_4('emp');
更安全的版本(避免SQL注入)
直接拼接表名存在SQL注入风险,推荐使用format函数配合%I占位符处理标识符,它会自动转义特殊字符并确保表名合法:
create or replace function func_execute_query_4(table_name varchar) returns integer as $$ declare c integer; begin execute format('select count(*) from %I', table_name) into c; return c; end $$ language plpgsql;
内容的提问来源于stack exchange,提问作者Tom
相关产品推荐
相关产品推荐

