返回元组并检查null

时间:2014-04-06 10:43:16

标签: postgresql stored-procedures types plpgsql postgresql-9.2

我有一个功能:

CREATE OR REPLACE FUNCTION my_function(user_id BIGINT) RETURNS BIGINT AS
$BODY$
DECLARE
  var1 ???; --- ???

BEGIN
  --1
  var1 := (SELECT table1.field1, table2.field2
    FROM table1
    INNER JOIN table2
    -- ......
  );

  --2
  --if var1 is not null...

首先,我希望var1成为一个元组。我必须创建一个这样的类型吗?

CREATE TYPE my_type ....

哪个有两个字段?或者也许有更好的方法来解决这个问题?

其次,我想确保var1不为空。怎么能这样做?

1 个答案:

答案 0 :(得分:1)

可以 create a TYPE或使用现有表格的类型。然后使用RETURNS SETOF my_type

但对于行类型,您只需要在单个函数中使用RETURNS TABLE (...)更方便 - 可能与RETURN QUERY结合使用:

CREATE OR REPLACE FUNCTION my_function(user_id bigint)
  RETURNS TABLE(field1 int, field2 text) AS  -- replace with actual types!
$func$
BEGIN    
   RETURN TABLE
   SELECT t1.field1, t2.field2 -- table-qualify to avoid naming conflict
   FROM   table1 t1
   JOIN   table2 t2 ON ...
   ...  ;

   -- if var1 is not null ...
   IF NOT FOUND THEN
      -- If nothing was found, you can ...
      -- RAISE EXCEPTION 'foo!' -- to raise an exception. Or ...
      -- RETURN QUERY SELECT 1, 'foo'; -- return a "default" row ...
   END IF;
END
$func$ LANGUAGE plpgsql;

标记中搜索这些关键字。有很多例子。