首頁 >資料庫 >mysql教程 >如何從 Postgres 函數傳回虛擬表?

如何從 Postgres 函數傳回虛擬表?

Mary-Kate Olsen
Mary-Kate Olsen原創
2024-12-27 10:28:10722瀏覽

How to Return a Virtual Table from a Postgres Function?

從Postgres 中的函數傳回虛擬表

在Postgres 中,使用函數建立具有多行和多列的自訂虛擬表需要特定的句法。本文示範如何正確編寫一個傳回類似虛擬表的記錄集的函數。

正確語法

定義一個傳回包含三個記錄的虛擬表的函數整數列,使用以下 PL/pgSQL code:

CREATE OR REPLACE FUNCTION f_foo()
  RETURNS TABLE (a int, b int, c int) AS
$func$
BEGIN
RETURN QUERY VALUES
  (1,2,3)
, (3,4,5)
, (3,4,5)
;
END
$func$  LANGUAGE plpgsql IMMUTABLE ROWS 3;

說明

  • RETURNS TABLE: 指示函數將傳回臨時行類型。
  • 回傳查詢VALUES: 用於使用 VALUES 表達式傳回多行。
  • ROWS 3: 宣告傳回的行數,協助查詢規劃器最佳化執行。
  • IMMUTABLE: 指定結果永遠不會改變,以提高性能

替代選項

簡單SQL:對於簡單場景,一條普通的SQL語句就夠了:

VALUES (1,2,3), (3,4,5), (3,4,5)

SQL函數:你也可以將上面的內容包裝起來SQL 函數中的語句:

CREATE OR REPLACE FUNCTION f_foo()
   RETURNS TABLE (a int, b int, c int) AS
$func$
   VALUES (1, 2, 3)
        , (3, 4, 5)
        , (3, 4, 5);
$func$  LANGUAGE sql IMMUTABLE ROWS 3;

用法

擷取虛擬表:

SELECT * FROM f_foo();

以上是如何從 Postgres 函數傳回虛擬表?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn