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 inline_handler
inline_handler是先前注册的函数的名称,该函数 在此将被调用以执行匿名代码块(DO命令) 语言。如果未指定inline_handler函数,则语言 不支持匿名代码块。处理函数必须 类型为internal的一个参数,它将是DO命令的内部参数 表示形式,它将通常返回void。 处理程序将被忽略。
通常返回void
通常返回void 是否表示在某种情况下可以使用DO
块返回void以外的内容?
如果有一种方法可以实现匿名代码执行,但没有DO块,并且具有自定义返回类型,那么我会很感兴趣。
请注意问题的内部标记:这是关于事情运作方式的问题。
答案 0 :(得分:0)
您无法从DO
返回结果。
最接近的等效方法是在pg_temp
模式中创建一个函数,该函数随后是一个临时函数,并在数据库会话结束时自动删除。