PostgreSQL預存程序(4)-return語句

來源:互聯網
上載者:User

標籤:value   create   return   --   ssi   express   rowtype   退出   數值   

1. return語句

有三個命令可以用來從函數中返回資料:

  • RETURN
  • RETURN NEXT
  • RETURN QUERY
 2. RETURN命令 文法:
RETURNRETURN expression;

如果沒有使用運算式 RETURN命令用於告訴這個函數已經完成執行了。
如果返回標量類型,那麼可以使用任何錶達式.要返回一個複合(行)數值,你必須寫一個記錄或者行變數的expression。

2.1 案例1:帶有運算式return案例
CREATE OR REPLACE FUNCTION getCompFoo1(in_col1 int, in_col2 TEXT)RETURNS compfooAS $$DECLARE     lottu compfoo;BEGIN    lottu.col1 := in_col1 + 1;    lottu.col2 := in_col2 || ‘_result‘;    RETURN lottu;END;$$ LANGUAGE PLPGSQL;

  如果你聲明函數帶輸出參數,那麼就只需要寫無運算式的RETURN。 那麼輸出參數變數的當前值將被返回。 

CREATE OR REPLACE FUNCTION getCompFoo2(in_col1 IN int,in_col2 IN TEXT, out_col1 OUT int, out_col2 OUT TEXT)AS $$BEGIN    out_col1 := in_col1 + 1;    out_col2 := in_col2 || ‘_result‘;END;$$ LANGUAGE PLPGSQL;
2.2 案例2:不帶有運算式return案例

如果你聲明函數返回void,那麼一個RETURN語句可以用於提前退出函數; 但是不要在RETURN後面寫一個運算式。

CREATE OR REPLACE FUNCTION getreturn(in_col1 int)RETURNS voidAS $$BEGIN    if in_col1 > 0 then      RAISE NOTICE ‘there is %‘,in_col1;    else      return;    end if;END;$$ LANGUAGE PLPGSQL;
3. RETURN NEXT命令文法:
RETURN NEXT expression;
3.1 RETURN NEXT命令

可以用於標量和複合資料型別;對於複合類型,將返回一個完整的結果"table"。

CREATE TABLE foo (fooid INT, foosubid INT, fooname TEXT);INSERT INTO foo VALUES (1, 2, ‘three‘);INSERT INTO foo VALUES (4, 5, ‘six‘);CREATE OR REPLACE FUNCTION getAllFoo() RETURNS SETOF foo AS$$DECLARE    r foo%rowtype;BEGIN    FOR r IN SELECT * FROM foo WHERE fooid > 0    LOOP        -- can do some processing here        RETURN NEXT r; -- return current row of SELECT    END LOOP;    RETURN;END$$ LANGUAGE PLPGSQL;
4. RETURN QUERY命令文法:
RETURN QUERY query;RETURN QUERY EXECUTE command-string [ USING expression [, ... ] ];
4.1 RETURN QUERY命令

  將一條查詢的結果追加到一個函數的結果集中。

CREATE OR REPLACE FUNCTION getAllFoo2() RETURNS SETOF foo AS$$DECLARE    r foo%rowtype;BEGIN    RETURN QUERY SELECT * FROM foo WHERE fooid > 0;END$$ LANGUAGE PLPGSQL;
4.2 RETURN QUERY EXECUTE命令

是執行動態SQL。

CREATE OR REPLACE FUNCTION getAllFoo3(filter numeric) RETURNS SETOF foo AS$$BEGIN    RETURN QUERY EXECUTE ‘SELECT * FROM foo WHERE fooid > $1
USING filter;
;END$$ LANGUAGE PLPGSQL;

 

PostgreSQL預存程序(4)-return語句

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.