PostgreSQL有匿名DO块在这里详细解释 https://www.postgresql.org/docs/current/sql-do.html。
这清楚地表明, 代码块被视为没有参数的函数的主体,返回 void。它被解析并执行一次。
我想知道是否有办法在没有参数但动态返回类型的情况下执行DO 块?
以下示例将解释我的要求。我想指出的是,我对plpgsql的使用只是一个示例!它可以是PostgreSQL环境中的任何LANGUAGE
DO $$
BEGIN
Return SELECT table_schema, table_name FROM information_schema.tables
WHERE table_type = 'VIEW' AND table_schema = 'public'
END$$ LANGUAGE plpgsql;
ERROR: RETURN cannot have a parameter in function returning void
在有人跑到答案部分并解释我要求矛盾之前,我想继续我的故事。PostgreSQL提供了一个CREATE LANGUAGE
功能 https://www.postgresql.org/docs/current/sql-createlanguage.html。 如果我们看一下inline
参数,它会说:
内联inline_handler
inline_handler是以前注册的函数的名称, 将在此调用以执行匿名代码块(DO 命令) 语言。如果未指定inline_handler函数,则语言 不支持匿名代码块。处理程序函数必须采用 一个 internal 类型的参数,它将是 DO 命令的内部 表示,它通常会返回 void。的返回值 处理程序将被忽略。
通常返回空隙
通常返回 void是否意味着存在可以使用DO
块返回 void 以外的其他内容的情况?
如果有一种方法可以实现匿名代码执行,但没有 DO 块,并且使用自定义返回类型,我会很感兴趣。
请注意问题的内部标签:这是一个关于事物如何运作的问题。
不能从DO
返回结果。
最接近的等效方法是在pg_temp
架构中创建一个函数,该函数是一个临时函数,并在数据库会话结束时自动删除。