2016-01-13 3 views
0

Есть ли разница между этими двумя функциями?В чем разница между этими двумя типами функций?

первый:

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$

Возможно, один из них был способом перехода в более старые версии, и это может быть лишено будущих выпусков?

+0

@choz это не отвечает на мой вопрос. там нет ничего о $ body $. – java

+0

Прочитайте [ответ Эрвина] (http://stackoverflow.com/a/12172353/1627271), может дать вам некоторое представление. – choz

+0

@java: '$$' и '$ body $' разные версии одной и той же вещи –

ответ

1

Нет никакой реальной разницы. Вы выбираете маркер «конца функции» после ключевого слова AS с «$$ quoting». В первом случае выбранным маркером является $$; во втором - $BODY$. Других существенных различий нет; язык не учитывает регистр ключевых слов.

3

Они эквивалентны; оба $$...$$ и $foo$...$foo$ являются dollar-quoted string constants. (Часть foo не является обязательной, она просто позволяет вам завершить строку точно там, где вы хотите, в случае, если ваша строка содержит $$.)

0

Функции сами по себе идентичны: как было указано, единственная разница заключается в том, закрывающий тег.

Декларации функций различны: объявление CREATE FUNCTION не будет перезаписывать существующую функцию с тем же именем, в то время как CREATE OR REPLACE FUNCTION будет.

Смежные вопросы