我是PostgreSQL的新手。我对PostgreSQL脚本有疑问。
在我上一次question我试图使用"执行" 。然后我才知道,如果我想在查询中使用Execute,我必须制作脚本(使用$$ LANGUAGE ...)。
但是从类似的问题中得到一个答案,使用query_to_xml并且它不需要脚本。为什么?
答案 0 :(得分:2)
与SQL Server不同,Postgres(以及许多其他DBMS,如Oracle,DB2,Firebird)在程序代码和SQL之间做了明确的区分。程序代码只能在函数(或过程)的上下文中运行。 do
块本质上是一个不返回任何内容的匿名函数。
动态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返回的通用函数,而不是专门的功能只做一件事。