【问题标题】:How to return select query in pl pgsql如何在pl pgsql中返回选择查询
【发布时间】:2019-03-30 02:40:05
【问题描述】:

在运行 Select 查询时,返回 Pl Pgsql 中的所有列 写在一个函数中, 在传递参数期间显示错误。

CREATE OR REPLACE FUNCTION myfunc(ENROLL VARCHAR(50)) RETURNS  SETOF RECORD AS $$
DECLARE CALTYPE VARCHAR(50);
BEGIN
SELECT COMPLETED INTO 
CALTYPE FROM TEMPDATA WHERE
ROLL=ENROLL;
    IF CALTYPE='FALSE' THEN
        RETURN QUERY
        SELECT * FROM SEM8
        WHERE ROLL=ENROLL;
    ELSE
        RETURN QUERY
        SELECT * FROM TEMPDATA
        WHERE ROLL=ENROLL;
    END IF;
END;
$$ LANGUAGE plpgsql;

SELECT * FROM myfunc('123');

【问题讨论】:

  • 错误是什么?
  • 你遇到了什么错误?
  • 错误:返回“记录”的函数需要列定义列表 LINE 1: SELECT * FROM myfunc('123');
  • 运行 SELECT * FROM myfunc('123'); 时出错;

标签: postgresql


【解决方案1】:

返回 SETOF RECORD 的函数需要列定义。您可以像这样在运行时定义它:

SELECT * FROM myfunc('123') mf(columnA TEXT, columnB INTEGER);

或者您可以将函数的返回类型更改为 TABLE 并在其中定义它,如下所示:

CREATE OR REPLACE FUNCTION myfunc(ENROLL VARCHAR(50)) 
RETURNS  TABLE (
    columnA TEXT,
    columnB INTEGER
) AS $$
DECLARE CALTYPE VARCHAR(50);
BEGIN
SELECT COMPLETED INTO 
CALTYPE FROM TEMPDATA WHERE
ROLL=ENROLL;
    IF CALTYPE='FALSE' THEN
        RETURN QUERY
        SELECT * FROM SEM8
        WHERE ROLL=ENROLL;
    ELSE
        RETURN QUERY
        SELECT * FROM TEMPDATA
        WHERE ROLL=ENROLL;
    END IF;
END;
$$ LANGUAGE plpgsql;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-11
    • 1970-01-01
    相关资源
    最近更新 更多