【问题标题】:Postgresql return nested set of values in stored procedurePostgresql 在存储过程中返回嵌套的值集
【发布时间】:2016-01-20 07:14:01
【问题描述】:

我目前正在使用 PGTAP 在 PostgreSQL 中进行测试。

为了尽量减少代码中的冗余,我将重复的代码放在了 功能。我有两个函数都返回一个 SETOF TEXT。

 CREATE FUNCTION _create_common_test(
        this_argument   varchar
    ) RETURNS SETOF TEXT AS $$
            DECLARE
               RETURN NEXT IS(this_argument, 'i_am_argument1', 'Checking Argument 1');
               MORE RETURN NEXT STATEMENTS HERE....
            END;
    $$ LANGUAGE plpgsql;


CREATE FUNCTION test_create_common_test_1() RETURNS SETOF TEXT AS $$
        BEGIN
            RETURN NEXT _create_common_test('i_am_argument1');
        END
    $$ LANGUAGE plpgsql;

CREATE FUNCTION test_create_common_test_2() RETURNS SETOF TEXT AS $$
        BEGIN
            RETURN NEXT _create_common_test('i_am_argument2');
        END
    $$ LANGUAGE plpgsql;

test_create_common_test_1test_create_common_test_2 在其函数内部调用相同的函数_create_common_test(),仅在参数中传递的值不同。

至于我的问题,是否可以在函数test_create_common_test_1test_create_common_test_2 中返回_create_common_test() 的返回值SETOF TEXT

我尝试过使用 PERFORM _create_common_test('i_am_argument2'),

CREATE FUNCTION test_create_common_test_2() RETURNS SETOF TEXT AS $$
        BEGIN
            PERFORM _create_common_test('i_am_argument2');
        END
    $$ LANGUAGE plpgsql;

但它没有列举我在 _create_common_test() 中得到的结果。

【问题讨论】:

  • perform 丢弃任何结果。你需要在test_create_common_test_2()中使用return query _create_common_test('i_am_argument2');
  • 我尝试运行return query _create_common_test('i_am_argument2');,但它只会导致语法错误。还尝试运行 return next _create_common_test('i_am_argument2'); 并会显示此错误:返回超过一行。
  • 对不起,需要return query select ...
  • 耶!非常感谢,它确实有效.. :) 现在生活更轻松了.. 嗯,你应该回答我的问题以便我接受吗? ^_^

标签: postgresql stored-procedures plpgsql pgtap


【解决方案1】:

正如 @a_horse_with_no_name 在 cmets 中正确回答的那样:

return query select * from _create_common_test('i_am_argument2');

【讨论】:

    猜你喜欢
    • 2016-04-17
    • 2016-04-08
    • 1970-01-01
    • 2017-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多