Каково различие между функцией и процедурой в МН / SQL?

Если я правильно понимаю ваш вопрос, вы можете сделать:

XSLT 2.0

<xsl:stylesheet version="2.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="text" encoding="UTF-8" />

<xsl:template match="/Screenings">
    <xsl:variable name="groups">
        <xsl:for-each-group select="Screening" group-by="concat(@type, '-', @subtype)">
            <group key="{current-grouping-key()}"/>
        </xsl:for-each-group>
    </xsl:variable>
    <xsl:value-of select="$groups/group/@key" separator="|"/>
</xsl:template>

</xsl:stylesheet>
<час>

Или просто:

<xsl:template match="/Screenings">
    <xsl:value-of select="distinct-values(Screening/concat(@type, '-', @subtype))" separator="|"/>
</xsl:template>
68
задан MozenRath 26 December 2013 в 06:36
поделиться

2 ответа

Процедура не имеет возвращаемого значения, тогда как функция имеет.

Пример:

CREATE OR REPLACE PROCEDURE my_proc
   (p_name IN VARCHAR2 := 'John') as begin ... end

CREATE OR REPLACE FUNCTION my_func
   (p_name IN VARCHAR2 := 'John') return varchar2 as begin ... end

Обратите внимание, как функция имеет предложение return между списком параметров и ключевым словом as. Это означает, что ожидается, что последний оператор внутри тела функции будет читаться примерно так:

return(my_varchar2_local_variable);

где my_varchar2_local_variable - это некоторый varchar2, который должен быть возвращен этой функцией.

49
ответ дан 24 November 2019 в 14:22
поделиться

Функция может быть встроена в оператор SQL, например

select foo
      ,fn_bar (foo)
  from foobar

, что нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно сделать с функциями в этом контексте, требуя, чтобы они были чистыми (т. Е. Одни и те же входные данные всегда выдают одинаковые выходные данные). Это ограничивает то, что может быть сделано в функции, но позволяет использовать его в строке в запросе, если оно определено как «чистое».

В противном случае функция (не обязательно детерминированная) может вернуть переменную или набор результатов. В случае функции, возвращающей набор результатов, вы можете присоединить его к некоторому другому выбору в запросе. Однако вы не можете использовать недетерминированную функцию, подобную этой, в коррелированном подзапросе, так как оптимизатор не может предсказать, какой набор результатов будет возвращен (это трудно поддается вычислению,

16
ответ дан 24 November 2019 в 14:22
поделиться
Другие вопросы по тегам:

Похожие вопросы: