2016-01-13 225 views
0

這兩個功能有區別嗎?這兩種功能有什麼區別?

1:

CREATE FUNCTION sales_tax(subtotal real) RETURNS real AS $$ 
BEGIN 
    RETURN subtotal * 0.06; 
END; 
$$ LANGUAGE plpgsql; 

第二:

CREATE OR REPLACE FUNCTION sales_tax(subtotal real) RETURNS real AS 
$BODY$ 
begin 
    RETURN subtotal * 0.06; 
end; 
$BODY$ 
    LANGUAGE plpgsql 

爲什麼一個具有$$,另一種有$body$? (PostgreSQL) What are '$$' used for in PL/pgSQL不是我的問題的答案。解釋什麼是$一般來說,它不是指$body$

也許他們中的一個是去老版本的方式,它可能會在未來的版本中depricit?

+0

@choz這不回答我的問題。那裏沒有關於$ body $的東西。 – java

+0

閱讀[Erwin的答案](http://stackoverflow.com/a/12172353/1627271),可能會給你一些線索。 – choz

+0

@java:'$$'和'$ body $'是同一個東西的不同版本 –

回答

1

沒有真正的區別。您在關鍵字AS之後選擇''引用''作爲'功能結束'標記。在第一種情況下,選擇的標記是$$;在第二個,它是$BODY$。沒有其他顯着差異;該語言對關鍵字不區分大小寫。

3

它們是等價的; $$...$$$foo$...$foo$都是dollar-quoted string constants。 (該foo部分是可選的,它只是讓你結束的字符串正是您想要,如果您的字符串實際上包含$$。)

0

功能本身是相同的:如已經指出的那樣,唯一的區別是關閉標籤。

函數的聲明不同:CREATE FUNCTION聲明不會覆蓋同名的現有函數,而CREATE OR REPLACE FUNCTION將會覆蓋。