WikiDer > Пользовательская функция

User-defined function

А определяемая пользователем функция (UDF) это функция предоставляется пользователем программы или среды в контексте, где обычно предполагается, что функции встроены в программу или среду.

БАЗОВЫЙ язык

В некоторых старых реализациях БАЗОВЫЙ язык программирования, определяемые пользователем функции определяются с использованием синтаксиса "DEF FN". Более современные диалекты BASIC находятся под влиянием структурное программирование парадигма, когда большая часть или весь код написан как определяемые пользователем функции или процедуры, и концепция становится практически избыточной.

Базы данных

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

Пользовательские функции в SQL объявляются с использованием СОЗДАТЬ ФУНКЦИЮ утверждение. Например, функция, преобразующая градусы Цельсия в градусы Фаренгейта, может быть объявлена ​​следующим образом:

СОЗДАЙТЕ НАЗНАЧЕНИЕ dbo.CtoF(Цельсия ПЛАВАТЬ)  ВОЗВРАТ ПЛАВАТЬ  ВОЗВРАЩАТЬСЯ (Цельсия * 1.8) + 32

После создания пользовательская функция может использоваться в выражения в операторах SQL. Например, его можно вызвать там, где разрешено большинство других внутренних функций. Это также включает Операторы SELECT, где функцию можно использовать с данными, хранящимися в таблицах базы данных. По идее, при таком использовании функция оценивается один раз для каждой строки. Например, предположим, что таблица с именем ELEMENTS содержит строку для каждого известного химического элемента. В таблице есть столбец с именем BoilingPoint для точки кипения этого элемента в градусах Цельсия. Запрос

ВЫБРАТЬ Имя, CtoF(Точка кипения)  ИЗ Элементы

будет извлекать имя и точку кипения из каждой строки. Он вызывает определяемую пользователем функцию CtoF, как объявлено выше, чтобы преобразовать значение в столбце в значение в градусах Фаренгейта.

Каждая определяемая пользователем функция имеет определенные свойства или характеристики. Стандарт SQL определяет следующие свойства:

  • Язык - определяет язык программирования, на котором реализована пользовательская функция; примеры включают SQL, C, C # и Java.
  • Стиль параметра - определяет соглашения, которые используются для передачи параметров функции и результатов между реализацией функции и системой базы данных (применимо, только если язык не является SQL).
  • Определенное имя - имя функции, уникальное в базе данных. Обратите внимание, что имя функции не обязательно должно быть уникальным, учитывая перегруженные функции. Некоторые реализации SQL требуют, чтобы имена функций в базе данных были уникальными, а перегруженные функции не допускаются.
  • Детерминизм - определяет, является ли функция детерминированной или нет. Характеристика детерминизма влияет на оптимизатор запросов при компиляции оператора SQL.
  • Доступ к данным SQL - сообщает системе управления базой данных, не содержит ли функция операторов SQL (NO SQL), содержит ли она операторы SQL, но не имеет доступа ни к каким таблицам или взгляды (СОДЕРЖИТ SQL), считывает данные из таблиц или представлений (ЧИТАЕТ ДАННЫЕ SQL) или фактически изменяет данные в базе данных (МОДИФИЦИРУЕТ ДАННЫЕ SQL).

Пользовательские функции не следует путать с хранимые процедуры. Хранимые процедуры позволяют пользователю группировать набор команд SQL. Процедура может принимать параметры и выполнять свои операторы SQL в зависимости от этих параметров. Процедура не является выражением и поэтому не может использоваться как пользовательские функции.

Некоторые системы управления базами данных позволяют создавать пользовательские функции на языках, отличных от SQL. Microsoft SQL Server, например, позволяет пользователю использовать .NET языки включая C # для этой цели. DB2 и Oracle поддерживают определяемые пользователем функции, написанные на языках программирования C или Java.

SQL Server 2000

Есть три типа UDF в Microsoft SQL Server 2000: скалярные функции, встроенные функции с табличным значением и функции с несколькими операторами, возвращающие табличное значение.

Скалярные функции возвращают одно значение данных (не таблицу) с предложением RETURNS. Скалярные функции могут использовать все скалярные типы данных, за исключением временных меток и пользовательских типов данных. Встроенные возвращающие табличное значение функции возвращают набор результатов одного оператора SELECT. Многопользовательские возвращающие табличное значение функции возвращают таблицу, которая была построена с помощью многих операторов TRANSACT-SQL.

Пользовательские функции могут быть вызваны из запроса, как встроенные функции, такие как OBJECT_ID, LEN, DATEDIFF, или могут быть выполнены с помощью оператора EXECUTE, как хранимые процедуры.

Примечания к производительности: 1. В Microsoft SQL Server 2000 функция с табличным значением, которая «обертывает» представление, может быть намного быстрее, чем само представление. Следующая MyFunction является примером «функции-оболочки», которая работает быстрее, чем базовое представление MyView:

СОЗДАЙТЕНАЗНАЧЕНИЕМоя функция()ВОЗВРАТ@TblСТОЛ(Студенческий билетVARCHAR(255),SAS_StudentInstancesIDINT,ЭтикеткаVARCHAR(255),ЦенитьДЕНЬГИ,CMN_PersonsIDINT)В КАЧЕСТВЕНАЧИНАТЬВСТАВЛЯТЬ@Tbl(Студенческий билет,SAS_StudentInstancesID,Этикетка,Ценить,CMN_PersonsID)ВЫБРАТЬСтуденческий билет,SAS_StudentInstancesID,Этикетка,Ценить,CMN_PersonsIDИЗМой взгляд- где MyView выбирает (с объединением) те же столбцы из большой таблицы (таблиц)ВОЗВРАЩАТЬСЯКОНЕЦ

2. В Microsoft SQL Server 2005 результат выполнения того же кода противоположен: представление выполняется быстрее, чем «функция-оболочка».

Пользовательские функции - это подпрограммы, состоящие из одного или нескольких операторов Transact-SQL, которые можно использовать для инкапсуляции кода для повторного использования. Он принимает ноль или более аргументов и оценивает возвращаемое значение. Содержит в теле операторы потока управления и DML, аналогичные хранимым процедурам. Не допускает изменений какого-либо глобального состояния сеанса, например, модификации базы данных или внешнего ресурса, такого как файл или сеть. Не поддерживает параметр вывода. Ключевое слово по умолчанию должно быть быть заданным для передачи значения параметра по умолчанию. Ошибки в UDF приводят к прерыванию UDF, что, в свою очередь, прерывает оператор, вызвавший UDF.

СОЗДАЙТЕНАЗНАЧЕНИЕКубический объем- Введите размеры в сантиметрах(@CubeLengthдесятичный(4,1),@CubeWidthдесятичный(4,1),@CubeHeightдесятичный(4,1))ВОЗВРАТдесятичный(12,3)В КАЧЕСТВЕНАЧИНАТЬВОЗВРАЩАТЬСЯ(@CubeLength*@CubeWidth*@CubeHeight)КОНЕЦ

Тип данных, поддерживаемый в Microsoft SQL Server 2000 Как временная таблица, используемая для хранения результатов В основном используется для определения временной переменной типа (таблицы) и возвращаемого значения UDF Область действия ограничена функцией, хранимой процедурой или пакетом, в котором она определена Операция присвоения не допускается между (Table) переменными Может использоваться в SELECT, INSERT, UPDATE и DELETE CREATE FUNCTION для создания UDFALTER FUNCTION для изменения характеристик UDFDROP FUNCTION для удаления UDF

Apache Hive

Apache Hive определяет, помимо обычных определяемых пользователем функций (UDF), также определяемые пользователем агрегатные функции (UDAF) и функции создания таблиц (UDTF).[1] Hive позволяет разработчикам создавать свои собственные пользовательские функции с помощью Java.[2]

Рекомендации

  1. ^ "LanguageManual UDF - Apache Hive - Apache Software Foundation". 26 июня 2015.
  2. ^ «HivePlugins - Apache Hive - Apache Software Foundation». 26 июня 2015.

внешняя ссылка