在Postgresql 9.0數據庫中,我可以在WHERE子句中使用整數(profile_id)爲SELECT語句創建網頁的URL。使用SQL函數而不是SELECT的好處
在過去,我只是簡單地做了這個SELECT,只要它很方便,例如使用子查詢作爲視圖中的列/字段。但我最近意識到我可以創建一個SQL函數來做同樣的事情。 (這是一個SQL函數,不是plpgsql)。
我想知道是否有一個優勢,主要是在使用一個函數,而不是在這樣的情況下的SELECT使用的資源方面?請參閱下面的內容並提前致謝。我在本網站的其他地方找不到關於此主題的任何內容。 (長時間讀者,首次來電者)。
該功能如下。
CREATE OR REPLACE FUNCTION msurl(integer)
RETURNS text AS
$BODY$
SELECT (('https://www.thenameofmywebsite/'::text ||
CASE
WHEN prof.type = 1 THEN 'm'::text
ELSE 'f'::text
END) || '/handler/'::text) || prof.profile_id AS profile_url
FROM profile prof
WHERE prof.profile_id = $1;
$BODY$
LANGUAGE sql
爲了讓我的網址我既可以使用
SELECT prof.name,
SELECT (('https://www.thenameofmywebsite/'::text ||
CASE
WHEN prof.type = 1 THEN 'm'::text
ELSE 'f'::text
END) || '/handler/'::text) || prof.profile_id AS profile_url, prof.start_date
FROM profile prof,
WHERE prof.profile_id = id_number;
或整潔的版本:
SELECT prof.name, msurl(id_number) as profile_url, prof.start_date FROM profile prof;
在這個例子中功能*會*對性能有很大的影響這是由於結果中每行都進行了額外的選擇。 – 2014-11-01 08:06:33
它可以用STABLE標誌內聯,但是在評論中有一個true。更好的喲寫沒有完整的內部SELECT只是標量SQL函數 – 2014-11-01 09:40:27