Jump to content

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

(Перенаправлено из пользовательской функции )

Пользовательская функция ( 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 ]

  1. ^ «LanguageManual UDF — Apache Hive — Apache Software Foundation» . 26 июня 2015 г.
  2. ^ «HivePlugins — Apache Hive — Apache Software Foundation» . 26 июня 2015 г.
  3. ^ «Апач Дорис UDF» . Проверено 8 апреля 2023 г.
[ редактировать ]
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 0a6155a7bc5a7fa4dec30d126c60120b__1702540680
URL1:https://arc.ask3.ru/arc/aa/0a/0b/0a6155a7bc5a7fa4dec30d126c60120b.html
Заголовок, (Title) документа по адресу, URL1:
User-defined function - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)