PostgreSQL:匿名 DO 块的 void retun 类型



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架构中创建一个函数,该函数是一个临时函数,并在数据库会话结束时自动删除。

相关内容

  • 没有找到相关文章

最新更新