2014-04-06 31 views
0

我有一個功能:返回數組和檢查空

所有的
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

可以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; 

搜索在標籤的關鍵詞。有很多例子。