存储过程是否可以返回两种不同的类型?
CREATE OR REPLACE FUNCTION test_return_type(p_decide integer)
RETURNS t_my_type AS
$BODY$DECLARE
v_my_type t_my_type;
BEGIN
IF p_decide = 1 THEN
RETURN p_decide;
ELSE
--some code which will fill columns in v_my_type;
RETURN v_my_type;
END IF;
END;$BODY$
LANGUAGE plpgsql VOLATILE
COST 100;
't_my_type'的定义:
CREATE TYPE t_my_type AS
(id integer,
owner integer,
type integer,
time bigint,
text character varying);
使用程序的代码:
SELECT * FROM test_return_type(1);
SELECT * FROM test_return_type(2);
如果这不可能,我应该用一些虚假数据填充v_my_type(当传递1时),这样我就可以返回过程返回类型中声明的t_my_type吗?还有比这更好的方法吗?
我正在使用PostgreSQL v9.3和pgAdmin III v1.18.0。
答案 0 :(得分:1)
您可以使用OUT
参数定义您的函数。在上面的示例中,p_decide
值会标记v_my_type
参数是否具有有意义的值。
CREATE OR REPLACE FUNCTION test_return_type(OUT p_decide integer, OUT v_my_type t_my_type) RETURNS record AS $$
...
有关从函数返回数据的其他选项,请参阅documentation。