2016-01-13 184 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将会覆盖。