gpt4 book ai didi

sql - 为什么 PostgreSQL 需要 Execute 脚本而不需要 query_to_xml 脚本?

转载 作者:行者123 更新时间:2023-11-29 14:32:39 24 4
gpt4 key购买 nike

我是 PostgreSQL 的新手。我对 PostgreSQL 脚本有疑问。

在我的最后question我试图使用“执行”。然后我知道,如果我想在查询中使用执行,我必须制作脚本(使用 $$ LANGUAGE ...)。

但类似问题的一个答案是使用 query_to_xml,它不需要脚本。为什么?

最佳答案

与 SQL Server 不同,Postgres(以及许多其他 DBMS,如 Oracle、DB2、Firebird)明确区分过程代码和 SQL。过程代码只能在函数(或过程)的上下文中运行。 do block 本质上是一个不返回任何内容的匿名函数。

动态 SQL 只能用在过程代码中。 query_to_xml 正是这样做的:它使用动态 SQL。

要计算表中的行数,您还可以创建一个使用动态 SQL 的函数:

create function count_rows(p_schemaname text, p_tablename text)
returns bigint
as
$$
declare
l_stmt text;
l_count bigint;
begin
l_stmt := format('select count(*) from %I.%I', p_schemaname, p_tablename);
execute l_stmt
into l_count;
return l_count;
end;
$$
language plpgsql;

然后您可以使用:

select schema_name, table_name, count_rows(schema_name, table_name)
from information_schema.tables
where schema_name = 'public';

query_to_xml 本质上与函数 count_rows() 做同样的事情 - 它只是一个运行任何 SQL 语句并返回它的通用函数结果作为 XML,而不是只做一件事的专门函数。

关于sql - 为什么 PostgreSQL 需要 Execute 脚本而不需要 query_to_xml 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49281340/

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