【发布时间】:2013-03-27 23:41:41
【问题描述】:
我想测试一个 Postgres 函数的结果(改变函数是不可能的)。
该函数接收 REFCURSOR 和其他几个东西作为参数,并返回相同的 RECURSOR。
get_function_that_returns_cursor(ret, 4100, 'SOMETHING', 123465)
现在我想在 Postgres 中创建一个小测试来获得这个 FUNCTION 的结果。 类似于下面的代码(这是我的方法,但它不起作用):
DO $$ DECLARE
ret REFCURSOR;
row_to_read table_it_will_return%ROWTYPE ;
BEGIN
PERFORM get_function_that_returns_cursor(ret, 4100, 'SOMETHING', 123465);
-- OR SELECT get_function_that_returns_cursor(ret, 4100, 'SOMETHING', 123465) INTO ret
FOR row_to_read IN SELECT * FROM ret LOOP
-- (...)
RAISE NOTICE 'Row read...';
END LOOP;
CLOSE ret;
END $$;
关于如何使它工作的任何建议?可用于测试此类函数的通用解决方案(获取 Cursor 并返回 Cursor?
如果我们不知道返回的行类型怎么办?
【问题讨论】:
-
在 PL/PgSQL 中使用动态行集很困难。这对他们来说真的不是很好。我建议在 pl/python、pl/perl 等函数中使用 refcursor 并在那里进行测试和评估。
标签: sql postgresql plpgsql database-cursor