gpt4 book ai didi

sql - 将表名作为参数传递时如何检查表是否包含任何行?

转载 作者:行者123 更新时间:2023-11-29 12:24:47 25 4
gpt4 key购买 nike

我正在尝试编写一个语句来检查表是否包含行:

SELECT COUNT(*) FROM $1 ;

如果想到我会把表名传入:$1

我收到以下错误消息:

syntax error at or near "$1"

我的陈述有什么问题?

最佳答案

你不能用准备好的语句来做到这一点。按照柯克的建议使用函数。唯一的区别,也许你选择第一行更安全,比如:

t=# create or replace function tempty(tn text) returns boolean as
$$
declare
c int;
begin
execute format('select 1 from %I limit 1',tn) into c;
return NOT coalesce(c,0) > 0;
end;
$$ language plpgsql
;
CREATE FUNCTION
t=# create table empty(i int);
CREATE TABLE
t=# select tempty('empty');
tempty
--------
t
(1 row)

t=# select tempty('pg_class');
tempty
--------
f
(1 row)

docs do not say直接传递给 execute 准备语句的值不能是标识符,但在任何地方都以标识符不可能的方式提及它们,例如:

A generic plan assumes that each value supplied to EXECUTE is one of the column's distinct values and that column values are uniformly distributed.

($1 是一个列值,有或没有一些属性。)

关于sql - 将表名作为参数传递时如何检查表是否包含任何行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46520221/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com