在不能接受集合的上下文中调用的集合值函数

纽力克

我收到错误:

在不能接受集合的上下文中调用的集合值函数

RETURN QUERY EXECUTE在行上执行此功能时

PLSQL $ cat lookup_email.pl 
CREATE OR REPLACE FUNCTION app.lookup_email(ident_id bigint,sess bigint,company_id bigint,email varchar)
RETURNS SETOF RECORD as $$
DECLARE
    rec RECORD;
    comp_id bigint;
    server_session bigint;
    schema_name varchar;
    query varchar;
BEGIN
    schema_name:='comp' || company_id;
    select app.session.session into server_session from app.session where app.session.identity_id=ident_id and app.session.session=sess;
    IF FOUND
    THEN
        BEGIN
            query:='SELECT i.email,u.user_id FROM app.identity as i,' || schema_name || '.uzer as u WHERE i.email like ''%' || email || '%'' and i.identity_id=u.identity_id';
            RAISE NOTICE 'executing: %',query;
            RETURN QUERY EXECUTE query;
            RETURN;
        EXCEPTION
            WHEN OTHERS THEN
                RAISE NOTICE ' query error (%)',SQLERRM;

        END;
    END IF;
END;
$$ LANGUAGE plpgsql;

这是来自psql的输出:

dev=> select app.lookup_email(4,730035455897450,6,'u');
NOTICE:  executing: SELECT i.email,u.user_id FROM app.identity as i,comp6.uzer as u WHERE i.email like '%u%' and i.identity_id=u.identity_id
NOTICE:   query error (set-valued function called in context that cannot accept a set)
 lookup_email 
--------------
(0 rows)

我知道查询不包含任何错误,因为它可以在另一个psql会话中使用:

dev=> SELECT i.email,u.user_id FROM app.identity as i,comp6.uzer as u WHERE i.email like '%u%' and i.identity_id=u.identity_id;
     email      | user_id 
----------------+---------
 [email protected] |       1
(1 row)

那么,如果我声明函数为as,为什么Postgres会抱怨RETURNS SETOF RECORD呢?我的错误在哪里?

埃文·卡洛尔

那么,如果我声明我的函数是RECORD SET,为什么Postgres会抱怨呢?我的错误在哪里?

  1. 在FROM子句中调用您的Set Returning Function。
  2. 始终指定您的类型。

它称为Set Returning Function,但是您要指定复合类型

这是完全有效的,

RETURNS SETOF RECORD $$

但是,您可能必须调用它,

SELECT email, user_id
FROM 
    app.lookup_email(4,730035455897450,6,'u')
    AS t(email text, user_id integer)

您不能在其中调用无类型SRF的上下文是没有表定义的上下文。这种语法可能会令人讨厌,因此只需更改RETURNS SETOF RECORD

RETURNS TABLE(email text, user_id integer) AS $$

并使用没有列定义列表的函数

SELECT email, user_id
FROM app.lookup_email(4,730035455897450,6,'u')

文档中查找更多信息

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在generate_series上进行强制转换会给出:错误:在无法接受集合的上下文中调用的定值函数

错误:不能在另一个窗口函数或集合的上下文中使用窗口函数

请解释“!”的含义 在函数调用的上下文中

创建从视图模型集合类到数据上下文中的属性的绑定

用集合调用构造函数类并从asyncTask获取sharedpreferences(无法传递上下文)

上下文必须是字典而不是集合

单值上下文中的多值

F#函数接受的参数过多或在预期之外的上下文中使用

错误:“ int”之前的预期主表达式(在接受数组的函数的上下文中)

MongoDB Ruby驱动程序-'synchronize':不能从陷阱上下文中调用

上下文中的值不能在不同的包中传输吗?

在写上下文中不能使用方法返回值

不能在写上下文中使用方法返回值;会话数据

Substr - 不能在解析上下文中使用值返回

在写上下文中不能使用方法返回值

CGSize类型的值在上下文中不能转换为bool

SPARK中不允许在干扰上下文中调用volatile函数

@composable调用只能在@composable函数的上下文中发生

在常量表达式上下文中定义之前,嵌套的constexpr函数调用

我从 @Composable 函数的上下文中调用 @Composable 但仍然收到错误

问题:@Composable 调用只能在 @Composable 函数的上下文中发生

在龙卷风中阻止上下文中调用异步函数

如何在Moose构造函数中确定在哪个上下文中调用它?

C ++析构函数-继承上下文中的显式调用

来自 aspx 设计时错误的函数调用“当前上下文中不存在名称”

在提供的上下文中实现的函数调用而不是 Jest 模拟

在作为函数调用应用的上下文中,q @符号是做什么的?

在父级上下文中调用父级控制器的函数

如何在调用者上下文中运行函数?