2014-11-03 50 views
0

我有一个问题,你必须使用数据类型和方法来返回多行。我已经在数据库(存储过程)的函数执行以下操作:返回多行postgres/sql语言

SELECT * 
FROM table 
INNER JOIN some_table ON value = value 
INNER JOIN some_tabl a ON value = value 
INNER JOIN some_tabl ON value = value 
WHERE table.id= 20 

该函数的输出可以提供1:n行。我如何返回多行?如果一个电话这样的功能:

SELECT * FROM functioname() 

它不会工作,因为我必须给列名称。当我尝试使postgres中的函数输出参数正确时,它不断给我提供错误。有人可以帮我弄这个吗?非常感谢

+0

编辑您所使用的代码你的问题。您似乎混淆了用户定义的函数和用户定义的存储过程。您不能将存储过程放入查询中。 – 2014-11-03 12:53:51

+0

你看到的代码是存储过程 – user3464409 2014-11-03 12:58:49

+2

@ user3464409不,它不是。这只是一个查询。以“CREATE OR REPLACE FUNCTION ...”部分开始。显示整个事情。还请显示错误消息**和您的PostgreSQL版本**的确切文本。 – 2014-11-03 13:26:52

回答

1

function vs stored procedure in postgresql

create table test(a int, b varchar(50)); 
    create table test1(a int, b varchar(50)); 

    DROP FUNCTION some_function(in int); 

    CREATE OR REPLACE FUNCTION some_function(in int) 
    RETURNS TABLE(a int, b character varying, c int, d character varying) AS 
    $BODY$ 

    DECLARE 
     some_input ALIAS FOR $1; 


    BEGIN 
    RETURN QUERY SELECT * from test a inner join test1 b on a.a = b.a where a.a = some_input; 
    END$BODY$ 

    LANGUAGE plpgsql VOLATILE 
    COST 100 
    ROWS 1000; 
    ALTER FUNCTION some_function(in int) 
    OWNER TO postgres; 
    COMMENT ON FUNCTION some_function(in int) IS 'FUNCTION JUST FOR TEST'; 

    SELECT * FROM some_function(1); 
+0

鉴于问题的上下文,你也可以解释一个查询和存储过程之间的区别;) – 2014-11-03 14:30:12

+0

@GordonLinoff我很抱歉:) – 2014-11-03 15:10:55