在 PostgreSQL 函數中傳回 SELECT 查詢結果
在 PostgreSQL 中,使用函數傳回 SELECT 查詢的結果需要理解適當的語法和傳回類型。我們將檢查一個提供的函數,並指導您如何正確檢索查詢結果。
問題中的函數 wordFrequency
目前缺少正確的回傳語句。為了解決這個問題,我們將使用 RETURN QUERY
語法。
修正後的函數:
<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer) RETURNS SETOF RECORD AS $$ BEGIN RETURN QUERY SELECT text, count(*), 100.0 / _max_tokens * count(*) AS ratio FROM ( SELECT text FROM token WHERE chartype = 'ALPHABETIC' LIMIT _max_tokens ) AS tokens GROUP BY text ORDER BY count DESC; END; $$ LANGUAGE plpgsql;</code>
關鍵點:
RETURN QUERY
語法可讓您直接傳回 SELECT 查詢的結果。 SETOF RECORD
指示函數將傳回一組記錄。 text
和 count(*)
)必須與查詢中的列名相符。 我們加入了 AS ratio
為第三個列名提供一個明確的名稱,避免歧義。 同時將 100
改為 100.0
,避免整數除法導致精確度損失。 呼叫函數:
<code class="language-sql">SELECT * FROM wordFrequency(123);</code>
此外,使用 RETURNS TABLE
明確定義傳回類型比傳回泛型記錄更實用,因為它消除了每次函數呼叫都需要指定列定義清單的需要。 例如:
<code class="language-sql">CREATE OR REPLACE FUNCTION wordFrequency(_max_tokens integer) RETURNS TABLE (text TEXT, cnt BIGINT, ratio NUMERIC) AS $$ BEGIN RETURN QUERY SELECT text, count(*), 100.0 / _max_tokens * count(*) FROM ( SELECT text FROM token WHERE chartype = 'ALPHABETIC' LIMIT _max_tokens ) AS tokens GROUP BY text ORDER BY count DESC; END; $$ LANGUAGE plpgsql;</code>
重要注意事項:
遵循這些步驟,您可以有效地使用 PostgreSQL 中的函數傳回 SELECT 查詢的結果。
以上是如何從 PostgreSQL 函數正確傳回 SELECT 查詢結果?的詳細內容。更多資訊請關注PHP中文網其他相關文章!