【问题标题】:how to return a table from function postgresql with multiples tables in the query?如何从函数 postgresql 返回一个在查询中有多个表的表?
【发布时间】:2013-04-01 00:16:11
【问题描述】:

我有一个问题,我有一个查询,它有多个表,我想创建一个函数,将该查询作为表返回给我

SELECT mat.codigo as codmatr, mat.codigoalumno as codal, mat.codigoempresa as codemp ,mat.codigopresentacion as codpre,
    mat.codigosecretaria as codsec, mat.fecha as fechamat, mat.estado as estadomat,
    mat.vigencia as vigmat, p.apellidos as apeAl, p.apellidos||' '||p.nombres as nombrecompleto,
    p.nombres as nomAl,razonsocial ,pre.codigocurso as codcur,cur.nombre as curso
    FROM matricula mat join alumno al on mat.codigoalumno = al.codigoalumno
    join persona p on  al.codigoalumno = p.codigo
    join persona pe on mat.codigoalumno = pe.codigo
    left join empresa emp on mat.codigoempresa = emp.codigo
    join presentacion pre on mat.codigopresentacion = pre.codigo
    join curso cur on cur.codigo = pre.codigocurso
    order by nombrecompleto

这是我的查询 这是我的功能

CREATE OR REPLACE FUNCTION fn_lisMatricula() RETURNS SETOF Matricula AS
$BODY$
DECLARE
    r Matricula%rowtype;
r Persona%rowtype;

BEGIN
    FOR r IN SELECT mat.codigo as codmatr, mat.codigoalumno as codal, mat.codigoempresa as codemp ,mat.codigopresentacion as codpre,
    mat.codigosecretaria as codsec, mat.fecha as fechamat, mat.estado as estadomat,
    mat.vigencia as vigmat, p.apellidos as apeAl, p.apellidos||' '||p.nombres as nombrecompleto,
    p.nombres as nomAl,razonsocial ,pre.codigocurso as codcur,cur.nombre as curso
    FROM matricula mat join alumno al on mat.codigoalumno = al.codigoalumno
    join persona p on  al.codigoalumno = p.codigo
    join persona pe on mat.codigoalumno = pe.codigo
    left join empresa emp on mat.codigoempresa = emp.codigo
    join presentacion pre on mat.codigopresentacion = pre.codigo
    join curso cur on cur.codigo = pre.codigocurso
    order by nombrecompleto
    LOOP       
        RETURN NEXT r;
    END LOOP;
    RETURN;
END
$BODY$
LANGUAGE 'plpgsql';

select * from fn_lisMatricula()

问题是函数的结果只有我的“矩阵”表的结构,但我想要所有查询结果的结构。

【问题讨论】:

  • 您是否尝试过使用它创建一个视图,然后使用该视图?
  • 抱歉,我无法理解您的问题。也许您正在寻找something like this?
  • 我想返回一个包含查询列的表,该查询有超过 2 个表,我该怎么做?

标签: function postgresql stored-procedures


【解决方案1】:

使用RETURNS TABLE 并指定结果列类型和名称。请参阅the PostgreSQL documentation for PL/PgSQLCREATE FUNCTION

或者,您可以:

  • CREATE TYPE 为目的自定义复合类型并返回 SETOF 它;
  • 使用OUT参数和RETURNS SETOF RECORD
  • 调用函数时使用RETURNS SETOF RECORD并指定结果记录结构

RETURNS TABLE(...) 是迄今为止最简单的选择。

【讨论】:

  • 是的,我读过一些关于返回表的内容,但我不知道它是如何工作的,我输入了一些代码来返回表但不起作用,你能给我写一个返回表的示例代码吗?一个简单的请。谢谢=)
  • @J.A.不,我不会写一个例子。您已经可以在 Stack Overflow、PostgreSQL 文档和其他地方找到许多示例。从这里开始:stackoverflow.com/search 和这里:google.com
猜你喜欢
  • 2014-12-15
  • 2014-09-21
  • 1970-01-01
  • 1970-01-01
  • 2018-09-14
  • 2015-10-10
  • 2022-07-07
  • 1970-01-01
  • 2021-05-01
相关资源
最近更新 更多