Пользовательская функция
Пользовательская функция ( UDF ) — это функция, предоставляемая пользователем программы или среды в контексте, где обычно предполагается, что функции встроены в программу или среду. Пользовательские функции обычно пишутся по требованию их создателя.
БЕЙСИК язык
[ редактировать ]В некоторых старых реализациях языка программирования BASIC пользовательские функции определяются с использованием синтаксиса «DEF FN». Более современные диалекты BASIC находятся под влиянием парадигмы структурированного программирования , где большая часть или весь код записывается как определяемые пользователем функции или процедуры, и эта концепция становится практически избыточной.
язык КОБОЛ
[ редактировать ]В языке программирования COBOL определяемая пользователем функция — это сущность, определяемая пользователем путем указания абзаца FUNCTION-ID. Пользовательская функция должна возвращать значение, указав фразу RETURNING заголовка раздела процедуры, и они вызываются с использованием синтаксиса идентификатора функции. Подробности см. в стандарте языка программирования COBOL ISO/IEC 1989:2014.
По состоянию на май 2022 года компилятор IBM Enterprise COBOL for z/OS 6.4 ( IBM COBOL ) содержит поддержку определяемых пользователем функций.
Базы данных
[ редактировать ]В системах управления реляционными базами данных определяемая пользователем функция обеспечивает механизм расширения функциональности сервера базы данных путем добавления функции, которую можно оценить с помощью операторов стандартного языка запросов (обычно SQL ). Стандарт SQL различает скалярные и табличные функции. Скалярная функция возвращает только одно значение (или NULL ), тогда как табличная функция возвращает (реляционную) таблицу, содержащую ноль или более строк, причем каждая строка содержит один или несколько столбцов.
Пользовательские функции в SQL объявляются с использованием CREATE FUNCTION
заявление. Например, пользовательская функция, которая преобразует градусы Цельсия в градусы Фаренгейта (температурная шкала, используемая в США), может быть объявлена следующим образом:
CREATE FUNCTION dbo.CtoF(Celsius FLOAT)
RETURNS FLOAT
RETURN (Celsius * 1.8) + 32
После создания пользовательскую функцию можно использовать в выражениях операторов SQL. Например, его можно вызывать там, где разрешено большинство других встроенных функций. Сюда также входят операторы SELECT , где функцию можно использовать для данных, хранящихся в таблицах базы данных. Концептуально при таком использовании функция вычисляется один раз для каждой строки. Например, предположим, что таблица с именем Elements
, со строкой для каждого известного химического элемента. В таблице есть столбец с именем BoilingPoint, где указана температура кипения этого элемента в градусах Цельсия. Запрос
SELECT Name, CtoF(BoilingPoint)
FROM Elements
будет получать имя и точку кипения из каждой строки. Он вызывает CtoF
пользовательская функция, как объявлено выше, для преобразования значения в столбце в значение в градусах Фаренгейта.
Каждая определяемая пользователем функция обладает определенными свойствами или характеристиками. Стандарт SQL определяет следующие свойства:
- Язык – определяет язык программирования, на котором реализована пользовательская функция; примеры включают SQL, C, C# и Java.
- Стиль параметра — определяет соглашения, которые используются для передачи параметров функции и результатов между реализацией функции и системой базы данных (применимо только в том случае, если язык не SQL).
- Конкретное имя — имя функции, уникальное в базе данных. Обратите внимание, что имя функции не обязательно должно быть уникальным, учитывая перегруженные функции . Некоторые реализации SQL требуют, чтобы имена функций были уникальными в пределах базы данных, а перегруженные функции не допускаются.
- Детерминизм — указывает, является ли функция детерминированной или нет. Характеристика детерминизма влияет на оптимизатор запросов при компиляции оператора SQL.
- Доступ к SQL-данным - сообщает системе управления базой данных, содержит ли функция операторы SQL (NO SQL), содержит операторы SQL, но не имеет доступа к каким-либо таблицам или представлениям (CONTAINS SQL), считывает данные из таблиц или представлений (READS SQL DATA), или фактически изменяет данные в базе данных (MODIFIES SQL DATA).
Пользовательские функции не следует путать с хранимыми процедурами . Хранимые процедуры позволяют пользователю группировать набор команд SQL. Процедура может принимать параметры и выполнять свои инструкции SQL в зависимости от этих параметров. Процедура не является выражением и, следовательно, не может использоваться как пользовательские функции.
Некоторые системы управления базами данных позволяют создавать определяемые пользователем функции на языках, отличных от SQL. Microsoft SQL Server Например, позволяет пользователю использовать для этой цели языки .NET , включая C#. DB2 и Oracle поддерживают определяемые пользователем функции, написанные на языках программирования C или Java.
SQL-сервер 2000
[ редактировать ]существует три типа UDF В Microsoft SQL Server 2000 : скалярные функции , встроенные функции с табличным значением и функции с табличным значением, состоящие из нескольких операторов.
Скалярные функции возвращают одно значение данных (а не таблицу) с предложением RETURNS. Скалярные функции могут использовать все скалярные типы данных, за исключением меток времени и пользовательских типов данных. Встроенные функции с табличным значением возвращают набор результатов одного оператора SELECT. Функции с табличными значениями, состоящими из нескольких операторов, возвращают таблицу, которая была построена с использованием множества операторов TRANSACT-SQL.
Пользовательские функции могут быть вызваны из запроса, как встроенные функции, такие как OBJECT_ID, LEN, DATEDIFF, или могут быть выполнены с помощью инструкции EXECUTE, как хранимые процедуры.
Примечания к производительности: 1. В Microsoft SQL Server 2000 функция с табличным значением, которая «обертывает» представление, может работать намного быстрее, чем само представление. Следующая MyFunction является примером «функциональной оболочки», которая работает быстрее, чем базовое представление MyView:
CREATE FUNCTION MyFunction()
RETURNS @Tbl TABLE
(
StudentID VARCHAR(255),
SAS_StudentInstancesID INT,
Label VARCHAR(255),
Value MONEY,
CMN_PersonsID INT
)
AS
BEGIN
INSERT @Tbl
(
StudentID,
SAS_StudentInstancesID,
Label,
Value,
CMN_PersonsID
)
SELECT
StudentID,
SAS_StudentInstancesID,
Label,
Value,
CMN_PersonsID
FROM MyView -- where MyView selects (with joins) the same columns from large table(s)
RETURN
END
2. На Microsoft SQL Server 2005 результат выполнения того же кода обратный: представление выполняется быстрее, чем «функция-обертка».
Пользовательские функции — это подпрограммы, состоящие из одного или нескольких операторов Transact-SQL, которые можно использовать для инкапсуляции кода для повторного использования. Он принимает ноль или более аргументов и оценивает возвращаемое значение. Имеет в своем теле инструкции потока управления и DML, аналогичные хранимым процедурам. Не разрешается вносить изменения в какое-либо состояние глобального сеанса, например, вносить изменения в базу данных или внешний ресурс, например файл или сеть. Не поддерживает выходной параметр. Ключевое слово DEFAULT должно быть указано для передачи значения параметра по умолчанию. Ошибки в UDF приводят к прерыванию UDF, что, в свою очередь, прерывает выполнение оператора, вызвавшего UDF.
CREATE FUNCTION CubicVolume
-- Input dimensions in centimeters
(
@CubeLength decimal(4,1),
@CubeWidth decimal(4,1),
@CubeHeight decimal(4,1)
)
RETURNS decimal(12,3)
AS
BEGIN
RETURN(@CubeLength * @CubeWidth * @CubeHeight)
END
Тип данных, поддерживаемый в Microsoft SQL Server 2000 Как временная таблица, используемая для хранения результатов Чаще всего используется для определения временной переменной типа (таблицы) и возвращаемого значения пользовательской функции. Область действия ограничена функцией, хранимой процедурой или пакетом, в котором она определена. Операция присваивания не допускается между переменными (таблицы). Может использоваться в операциях SELECT, INSERT, UPDATE и DELETE. CREATE FUNCTION для создания UDF ALTER FUNCTION для изменения характеристик UDF DROP FUNCTION для удаления UDF
Улей Апачей
[ редактировать ]Apache Hive определяет, помимо обычных пользовательских функций (UDF), также определяемые пользователем агрегатные функции (UDAF) и функции создания таблиц (UDTF). [ 1 ] Hive позволяет разработчикам создавать свои собственные функции с помощью Java. [ 2 ]
Апач Дорис
[ редактировать ]Apache Doris, аналитическая база данных реального времени с открытым исходным кодом, позволяет внешним пользователям добавлять в нее свои собственные пользовательские функции, написанные на C++. [ 3 ]
Ссылки
[ редактировать ]- ^ «LanguageManual UDF — Apache Hive — Apache Software Foundation» . 26 июня 2015 г.
- ^ «HivePlugins — Apache Hive — Apache Software Foundation» . 26 июня 2015 г.
- ^ «Апач Дорис UDF» . Проверено 8 апреля 2023 г.