stringtranslate.com

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

Пользовательская функция ( 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оператора. Например, определяемая пользователем функция, которая преобразует градусы Цельсия в градусы Фаренгейта (температурная шкала, используемая в США), может быть объявлена ​​следующим образом:

СОЗДАТЬ ФУНКЦИЮ dbo . CtoF ( Цельсия FLOAT ) ВОЗВРАТ FLOAT ВОЗВРАТ ( Цельсия * 1,8 ) + 32           

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

ВЫБРАТЬ имя , CtoF ( BoilingPoint ) ИЗ элементов    

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

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

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

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

SQL-сервер 2000

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

Скалярные функции возвращают одно значение данных (а не таблицу) с предложением 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 ) ВЫБЕРИТЕ идентификатор студента , SAS_StudentInstancesID , Label , Value , CMN_PersonsID FROM MyView где MyView выбирает ( с соединениями ) одни и те же столбцы из большой таблицы ( таблиц )                                                 ВОЗВРАТ КОНЕЦ

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

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

CREATE FUNCTION CubicVolume Введите размеры в сантиметрах ( @CubeLength decimal ( 4 , 1 ), @CubeWidth decimal ( 4 , 1 ), @CubeHeight decimal ( 4 , 1 ) ) RETURNS decimal ( 12 , 3 ) AS BEGIN RETURN ( @CubeLength * @CubeWidth * @CubeHeight ) КОНЕЦ                    

Тип данных, поддерживаемый в 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]

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

  1. ^ "LanguageManual UDF - Apache Hive - Apache Software Foundation" . 26 июня 2015 г.
  2. ^ "HivePlugins - Apache Hive - Apache Software Foundation" . 26 июня 2015 г.
  3. ^ "UDF Apache Doris" . Проверено 8 апреля 2023 г.

Внешние ссылки