【问题标题】:how would i print out multiple columns from a stored procedure in plpgsql我如何从 plpgsql 中的存储过程中打印出多列
【发布时间】:2011-08-09 22:25:02
【问题描述】:

我正在尝试在存储过程中打印多个列...谁能提供一个使用查询的示例。谢谢你。

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

因此,现在我需要创建一个存储过程,该过程将返回两列,一个是年份,一个是百分比,但是我怎么知道这一列是 yr,下一列是 prnct。

【问题讨论】:

    标签: postgresql plpgsql


    【解决方案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 是相同的,但当然是多行 :)

    【讨论】:

    • 所以基本上它会像
    • 所以基本上它会像:CREATE OR REPLACE FUNCTION profit_p_m() RETURNS SETOF 记录为 $$ 但我将如何指定哪一列是哪一列你能提供一个例子我将如何使用记录我将返回两列和属于这些列的所有行
    • 因为我将它用作 SETOF 记录,应该显示 2 列和所有行,我将如何在 java 程序中调用它。会是这样吗? callm=con.prepareStatement("select * from queryTen() AS");
    • @mizz-a:我现在添加了RECORD 的示例。
    猜你喜欢
    • 2013-04-13
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多