【发布时间】: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_1 和test_create_common_test_2 在其函数内部调用相同的函数_create_common_test(),仅在参数中传递的值不同。
至于我的问题,是否可以在函数test_create_common_test_1 和test_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