Если я правильно понимаю ваш вопрос, вы можете сделать:
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>
Процедура не имеет возвращаемого значения, тогда как функция имеет.
Пример:
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, который должен быть возвращен этой функцией.
Функция может быть встроена в оператор SQL, например
select foo
,fn_bar (foo)
from foobar
, что нельзя сделать с помощью хранимой процедуры. Архитектура оптимизатора запросов ограничивает то, что можно сделать с функциями в этом контексте, требуя, чтобы они были чистыми (т. Е. Одни и те же входные данные всегда выдают одинаковые выходные данные). Это ограничивает то, что может быть сделано в функции, но позволяет использовать его в строке в запросе, если оно определено как «чистое».
В противном случае функция (не обязательно детерминированная) может вернуть переменную или набор результатов. В случае функции, возвращающей набор результатов, вы можете присоединить его к некоторому другому выбору в запросе. Однако вы не можете использовать недетерминированную функцию, подобную этой, в коррелированном подзапросе, так как оптимизатор не может предсказать, какой набор результатов будет возвращен (это трудно поддается вычислению,