我将如何从plpgsql中的存储过程中打印出多个列

时间:2011-08-09 22:25:03

标签: postgresql plpgsql

我正在尝试在存储过程中打印多个列...任何人都可以请我提供一个使用查询的示例。谢谢。

例如,K,我有一个电影数据库,我想找到自1960年以来所有电影中有利可图的电影的百分比。我有这样做的queires,我在pgADMIN上运行它,它完美地工作;但是当我尝试创建存储过程时,我知道我必须使用创建类型持有者(yr INTEGER,prnct FLOAT)。

所以现在我需要创建一个存储过程,它将返回一年中的两列和一个百分比,但是我如何才能使该列为年而下一列为prnct。

1 个答案:

答案 0 :(得分:1)

如果您想要返回包含多列的单行,则可以使用recordsome_table作为类型。

如果你有一个像movie这样的表,你可以创建一个像这样的函数:

CREATE OR REPLACE FUNCTION get_profitable_movie() RETURNS movie AS

如果你想返回一些任意类型,那么你必须做这样的事情:

CREATE OR REPLACE FUNCTION get_profitable_movie() RETURNS record AS

如果你想返回超过1行,你必须使用SETOF修饰符,如下所示:

CREATE OR REPLACE FUNCTION get_profitable_movie() RETURNS SETOF record AS

您可以创建如下函数:

CREATE OR REPLACE FUNCTION multicolumn_thing() RETURNS record AS $$
DECLARE
    r record;
BEGIN
    SELECT 1, 2, 3 INTO r;
    RETURN r;
END
$$ LANGUAGE 'plpgsql';

并从中选择结果:

SELECT
    columns.a,
    columns.b,
    columns.c
FROM multicolumn_thing() AS columns(a int, b int, c int);

使用setof它是相同但多行的课程:)