2014-11-16 86 views
-1

我正在嘗試編寫一個純SQL函數,它需要兩個參數,這兩個參數對應勝利的數量並繪製一個團隊已經獲得的數量。這是我想寫的函數的實際定義。編寫一個純sql函數

寫純SQL(即,不是一個PL/pgSQL函數)計算值分的總功能命名的需要 兩個參數對應於獲勝的數目和繪製由一隊贏得。該函數 應返回基於上面公式1中的公式獲得的總分數。

,我使用這個函數的計算公式是

3 · wins + draws 

我沒有以前那麼用SQL寫的任何功能,這樣我看它的在線,但我發現,寫我的代碼上看起來不正確。這是我迄今爲止編寫的代碼,但我認爲它不起作用。

CREATE OR REPLACE FUNCTION calc_points_total(integer, integer) 
RETURN integer AS $$ 
    SELECT $1 :: ((3 * $1) + $2) AS result; 
$$ LANGUAGE SQL 

,我使用這個表是

Table "lab10.group_standings" 
Column | Type | Modifiers 
--------+-----------------------+----------- 
team | character varying(25) | not null 
wins | smallint | not null 
losses | smallint | not null 
draws | smallint | not null 
points | smallint | not null 
Indexes: 
"group_standings_pkey" PRIMARY KEY, btree (team) 
Check constraints: 
"group_standings_draws_check" CHECK (draws >= 0) 
"group_standings_losses_check" CHECK (losses >= 0) 
"group_standings_points_check" CHECK (points >= 0) 
"group_standings_wins_check" CHECK (wins >= 0) 
+0

您需要命名函數定義中的參數。 – Barmar

+0

@Barmar你是什麼意思?我更新了我的代碼是否有效? – ryan

+0

@Barmar:不,你沒有,編號的參數很好,你在答案中鏈接到的文檔甚至要注意參數名是可選的。最大的問題是'::'用於在PostgreSQL中進行投射。 –

回答

2

PostgreSQL的CREATE FUNCTION語法記錄here。它應該是:

CREATE FUNCTION calc_points_total(win INTEGER, draw INTEGER) RETURNS INTEGER 
AS $$ SELECT (3 * win) + draw $$ 
LANGUAGE SQL;