【问题标题】:ERROR: query has no destination for result data for FUNCTION returning a bigint错误:查询没有返回 bigint 的 FUNCTION 结果数据的目的地
【发布时间】:2014-02-08 18:36:55
【问题描述】:

关于这个错误有很多类似的问题,但似乎没有一个回答我的情况。我在 PostgreSql 中创建了以下存储过程:

CREATE OR REPLACE FUNCTION "MySchema".UserAccountInsert(
    id             bigint,
    lang           varchar(3),
    nname          varchar(40),
    email          varchar(40),
    email_conf     boolean,
    status         smallint,
    status_update  bigint,
    creation       bigint,
    preferences    json)
    RETURNS bigint AS $BODY$
DECLARE
    rowc INTEGER;
    ret_id bigint;
BEGIN
    SELECT "ID" FROM "MySchema"."USER_ACCOUNT"
        WHERE "ID" = id OR "NAME" = nname OR "EMAIL" = email
        LIMIT 1;
    GET DIAGNOSTICS rowc = ROW_COUNT;
    IF ( rowc > 0 ) THEN
        ret_id = -1; /* Unsuccessful */
    ELSE
        IF ( id <= 0 ) THEN
            INSERT INTO "MySchema"."USER_ACCOUNT" ("LANG","NAME","EMAIL","EMAIL_CONF","STATUS","STATUS_UPDATE","CREATION","PREFERENCES")
            VALUES (lang,nname,email,email_conf,status,status_update,creation,preferences) RETURNING "ID" INTO ret_id;
        ELSE
            INSERT INTO "MySchema"."USER_ACCOUNT" ("ID", "LANG","NAME","EMAIL","EMAIL_CONF","STATUS","STATUS_UPDATE","CREATION","PREFERENCES")
            VALUES (id, lang,nname,email,email_conf,status,status_update,creation,preferences);
            ret_id = id;
        END IF;
    END IF;
    RETURN ret_id;
END; $BODY$
LANGUAGE plpgsql;

我正在尝试从 pgAdmin III 调用它:

SELECT "MySchema".UserAccountInsert(
    1000::bigint,
    'ENG'::varchar(3),
    'name1000'::varchar(40),
    'email1000'::varchar(40),
    'f'::boolean,
    1::smallint,
    1391878008121::bigint,
    1391878008121::bigint,
    '{}'::json) as ret_id;

但我收到以下错误消息:

ERROR:  query has no destination for result data
HINT:  If you want to discard the results of a SELECT, use PERFORM instead.
CONTEXT:  PL/pgSQL function "MySchema".useraccountinsert(bigint,character varying,character varying,character varying,boolean,smallint,bigint,bigint,json) line 6 at SQL statement

我应该如何调用我的函数?

【问题讨论】:

  • 在您的函数中,您需要以某种方式存储SELECT 语句的结果:postgresql.org/docs/current/static/…
  • 所以不可能返回一个bigint,它必须是一行包含一个bigint,是吗?
  • 我只返回一个int,而不是sql语句的结果...
  • 你有一个select inside 你的函数 (SELECT "ID" FROM "MySchema"."USER_ACCOUNT"...),它需要一些地方来存储结果
  • 感谢今晚的帮助!!!

标签: sql stored-procedures postgresql-9.2


【解决方案1】:

根据 a_horse_with_no_name 的评论,我修改了我的函数如下:

SELECT COUNT(*) INTO rowc FROM "MySchema"."USER_ACCOUNT"
    WHERE "ID" = id OR "NAME" = nname OR "EMAIL" = email
    LIMIT 1;
/* GET DIAGNOSTICS rowc = ROW_COUNT; */

而且它有效!

【讨论】:

    猜你喜欢
    • 2014-07-27
    • 2023-03-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多