存储过程返回类型?

时间:2014-05-21 12:10:25

标签: postgresql stored-procedures

存储过程是否可以返回两种不同的类型?

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。

1 个答案:

答案 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