Что такое скалярная функция

Скалярная функция

Научные статьи на тему «Скалярная функция»

Хаотическая теория инфляции как физическая гипотеза

Скалярным полем называют поле, которое не имеет направления и является функцией координат.
Скалярное поле используют по всех инфляционных моделях.
Так, Гут использовал потенциал скалярного поля, имеющий несколько минимумов.
При этом движение Вселенной станет уменьшать скорость падения скалярного поля.
Так, чем больше скалярное поле, тем больше скорость расширения Вселенной.

О производной скалярной функции по симметричному матричному аргументу

В работе предлагается новое определение матричного градиента относительно симметричной матрицы. Показано, что это определение совместимо с известной формулировкой матричного принципа максимума, применяемого в теории оптимального управления.

Электромагнитное поле

Потенциалы постоянного поля можно выбрать так, чтобы они не зависели от времени, а были только функциями.
потенциал неоднозначен для постоянного электромагнитного поля, если к нему добавить градиент любой функции.
постоянном электромагнитном поле В том случае, если мы имеем дело с постоянным электромагнитным полем, то функция.
Тогда энергия ($W$) сохраняется, при этом совпадает с функцией Гамильтона: \[W=\frac<\sqrt<1-\frac.
Надо отметить, что энергия зависит только от скалярного и не зависит от векторного потенциала.

Многомерные евклидовы поверхности, заданные несколькими скалярными функциями

Актуальность и цели. В настоящее время активно развивается теория поверхностей многомерных евклидовых пространств. Исследованы гиперповерхности, описываемые одной явной скалярной функцией. Начаты исследования поверхностей, задаваемых несколькими скалярными функциями. Целью настоящей работы является описание поверхностей, задаваемых несколькими скалярными функциями. Материалы и методы. Рассматриваются поверхности, являющиеся пересечением нескольких цилиндрических поверхностей. Результаты. Выписаны касательные плоскости цилиндрических поверхностей и их пересечений. Получены координаты векторов нормалей цилиндрических поверхностей и их пересечений. Приведены выражения коэффициентов форм кривизны цилиндрических поверхностей через коэффициенты их метрических форм. По заданным коэффициентам метрических форм цилиндрических поверхностей найдены поверхности, являющиеся пересечением заданных как пересечения цилиндрических поверхностей. Выводы. Всякая поверхность многомерного евклидова простра.

Функции Transact-SQL

Функции языка Transact-SQL могут быть агрегатными или скалярными. Эти типы функций рассматриваются в этой статье.

Агрегатные функции

Агрегатные функции выполняют вычисления над группой значений столбца и всегда возвращают одно значение результата этих вычислений. Язык Transact-SQL поддерживает несколько обычных агрегатных функций:

AVG

Вычисляет среднее арифметическое значение данных, содержащихся в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

MIN и MAX

Определяют максимальное и минимальное значение из всех значений данных, содержащихся в столбце. Значения могут быть числовыми, строковыми или временными (дата/время).

SUM

Вычисляет общую сумму значений в столбце. Значения, над которыми выполняется вычисление, должны быть числовыми.

COUNT

Подсчитывает количество значений, отличных от null в столбце. Функция count(*) является единственной агрегатной функцией, которая не выполняет вычисления над столбцами. Эта функция возвращает количество строк (независимо от того, содержат ли отдельные столбцы значения null).

COUNT_BIG

Аналогична функции count, с той разницей, что возвращает значение данных типа BIGINT.

Использование обычных агрегатных функций в инструкции SELECT будет рассматриваться в одной из следующих статей.

Скалярные функции

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

Эти типы функций рассматриваются в последующих разделах.

Числовые функции

Числовые функции языка Transact-SQL — это математические функции для модифицирования числовых значений. Список числовых функций и их краткое описание приводится в таблице ниже:

Возвращает абсолютное значение (т. е. отрицательные значения возвращаются, как положительные) числового выражения n.

Обратные тригонометрические функции, вычисляющие арккосинус, арксинус, арктангенс значения n (для ATN2 вычисляется арктангенс n/m). Исходные значения n, m и результат имеют тип данных FLOAT.

Тригонометрические функции, вычисляющие косинус, синус, тангенс, котангенс значения n. Результат имеет тип данных FLOAT.

Функция DEGREES преобразует радианы в градусы, RADIANS соответственно наоборот.

Округляет число до большего целого значения.

Округляет значение n с точностью до p. Когда аргумент p положительное число, округляется дробная часть числа n, а когда отрицательное — целая часть. При использовании необязательного аргумента t, число n не округляется, а усекается (т.е. округляется в меньшую сторону).

Округляет до меньшего целого значения.

Вычисляет значение e n .

LOG(n) — вычисляет натуральный логарифм (т.е. с основанием e) числа n, LOG10(n) — вычисляет десятичный (с основанием 10) логарифм числа n.

Возвращает значение π (3,1415).

Вычисляет значение x y .

Возвращает произвольное число типа FLOAT в диапазоне значений между 0 и 1.

Возвращает количество строк таблицы, которые были обработаны последней инструкцией Transact-SQL, исполненной системой. Возвращаемое значение имеет тип BIGINT.

Возвращает знак значения n в виде числа: +1, если положительное, -1, если отрицательное.

SQRT(n) — вычисляет квадратный корень числа n, SQUARE(n) — возвращает квадрат аргумента n.

Функции даты

Функции даты вычисляют соответствующие части даты или времени выражения или возвращают значение временного интервала. Поддерживаемые в Transact-SQL функции даты и их краткое описание приводятся в таблице ниже:

Возвращает текущую системную дату и время.

Возвращает указанную в параметре item часть даты date в виде целого числа.

Возвращает указанную в параметре item часть даты date в виде строки символов.

Вычисляет разницу между двумя частями дат dat1 и dat2 и возвращает целочисленный результат в единицах, указанных в аргументе item.

Прибавляет n-е количество единиц, указанных в аргументе item к указанной дате date. (Значение аргумента n также может быть отрицательным.)

Строковые функции

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

Преобразовывает указанный символ в соответствующее целое число кода ASCII.

Преобразовывает код ASCII (или Unicode если NCHAR) в соответствующий символ.

Возвращает начальную позицию вхождения подстроки str1 в строку str2. Если строка str2 не содержит подстроки str1, возвращается значение 0

Возвращает целое число от 0 до 4, которое является разницей между значениями SOUNDEX двух строк str1 и str2. Метод SOUNDEX возвращает число, которое характеризует звучание строки. С помощью этого метода можно определить подобно звучащие строки. Работает только для символов ASCII.

Возвращает количество первых символов строки str, заданное параметром length для LEFT и последние length символов строки str для функции RIGHT.

Возвращает количество символов (не количество байт) строки str, указанной в аргументе, включая конечные пробелы.

Функция LOWER преобразовывает все прописные буквы строки str1 в строчные. Входящие в строку строчные буквы и иные символы не затрагиваются. Функция UPPER преобразовывает все строчные буквы строки str в прописные.

Функция LTRIM удаляет начальные пробелы в строке str, RTRIM соответственно удаляет пробелы в конце строки.

Возвращает строку в кодировке Unicode с добавленными ограничителями, чтобы преобразовать строку ввода в действительный идентификатор с ограничителями.

Возвращает начальную позицию первого вхождения шаблона p в заданное выражение expr, или ноль, если данный шаблон не обнаружен.

Заменяет все вхождения подстроки str2 в строке str1 подстрокой str3.

Повторяет i раз строку str.

Выводит строку str в обратном порядке.

Возвращает четырехсимвольный код soundex, используемый для определения похожести двух строк. Работает только для символов ASCII.

Возвращает строку пробелов длиной, указанной в параметре length. Аналог REPLICATE(‘ ‘, length).

Преобразовывает заданное выражение с плавающей точкой f в строку, где len — длина строки, включая десятичную точку, знак, цифры и пробелы (по умолчанию равно 10), а d — число разрядов дробной части, которые нужно возвратить.

Удаляет из строки str1 length-символов, начиная с позиции a, и вставляет на их место строку str2.

Извлекает из строки str, начиная с позиции a, подстроку длиной length.

Системные функции

Системные функции языка Transact-SQL предоставляют обширную информацию об объектах базы данных. Большинство системных функций использует внутренний числовой идентификатор (ID), который присваивается каждому объекту базы данных при его создании. Посредством этого идентификатора система может однозначно идентифицировать каждый объект базы данных.

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

Преобразовывает выражение w в указанный тип данных type (если это возможно). Аргумент w может быть любым действительным выражением.

Возвращает первое значение выражения из списка выражений a1, a2, . которое не является значением null.

Возвращает длину столбца col объекта базы данных (таблицы или представления) obj.

Эквивалент функции CAST, но аргументы указываются по-иному. Может применяться с любым типом данных.

Возвращает текущие дату и время.

Возвращает имя текущего пользователя.

Возвращает число байтов, которые занимает выражение z.

Возвращает 1, если использование значений null в базе данных dbname отвечает требованиям стандарта ANSI SQL.

Возвращает значение выражения expr, если оно не равно NULL; в противном случае возвращается значение value.

Определяет, имеет ли выражение expr действительный числовой тип.

Создает однозначный идентификационный номер ID, состоящий из 16-байтовой двоичной строки, предназначенной для хранения значений типа данных UNIQUEIDENTIFIER.

Создает идентификатор GUID, больший, чем любой другой идентификатор GUID, созданный ранее этой функцией на указанном компьютере. (Эту функцию можно использовать только как значение по умолчанию для столбца.)

Возвращает значение null, если значения выражений expr1 и expr2 одинаковые.

Возвращает информацию о свойствах сервера базы данных.

Возвращает ID текущего пользователя.

Возвращает идентификатор пользователя username. Если пользователь не указан, то возвращается идентификатор текущего пользователя.

Возвращает имя пользователя с указанным идентификатором id. Если идентификатор не указан, то возвращается имя текущего пользователя.

Функции метаданных

По большому счету, функции метаданных возвращают информацию об указанной базе данных и объектах базы данных. В таблице ниже приводятся некоторые из наиболее важных функций метаданных вместе с их кратким описанием:

Возвращает имя столбца с указанным идентификатором col_id таблицы с идентификатором tab_id.

Возвращает информацию об указанном столбце.

Возвращает значение свойства property базы данных database.

Возвращает идентификатор базы данных db_name. Если имя базы данных не указано, то возвращается идентификатор текущей базы данных.

Возвращает имя базы данных, имеющей идентификатор db_id. Если идентификатор не указан, то возвращается имя текущей базы данных.

Возвращает имя индексированного столбца таблицы table. Столбец указывается идентификатором индекса i и позицией no столбца в этом индексе.

Возвращает свойства именованного индекса или статистики для указанного идентификационного номера таблицы, имя индекса или статистики, а также имя свойства.

Понятие поля в физике

Когда в пространстве распределена какая-либо физическая величина, то говорят, что в пространстве задано поле этой величины.

Если распределена скалярная величина, то поле называют скалярным. Такое поле математики описывают скалярной функцией.

А если в области распределена векторная величина, тогда поле называется векторным. Его описывают с помощью векторной функции.

Скалярное поле

К примеру, мы можем измерять температуру зимой в различных точках комнаты.

При этом, чем ближе к батарее центрального отопления и чем выше к потолку, тем выше будет температура. А в точках у пола и в отдалении от нагретой батареи температура будет ниже на несколько градусов.

Рассмотрим трехмерное пространство (рис. 1) и какую-нибудь точку, расположенную в этом пространстве. Обозначим точку большой латинской буквой, например P.

Этой точке поставлены в соответствие три числа x, y, z, лежащие на осях Ox, Oy, Oz. Такие числа называют координатами точки. Обычно математики записывают координаты точки рядом с ее названием: \(\large P\left( x ; y ; z \right)\).

Мы можем дополнительно поставить в соответствие этой точке четвертое число – температуру t в градусах Цельсия (рис. 2).

Составим таблицу, в которой будут содержаться координаты точек пространства и температура в этих точках. Так мы упорядочим информацию о распределении температуры в комнате.

По такой таблице можно построить графики, на которых изобразим, как именно температура будет зависеть от какой-либо координаты пространства.

Эта таблица и графики содержат информацию о поле температур.

Так как распределенная по комнате температура является скалярной величиной, то поле температуры называют скалярным. А таблица задает скалярную функцию, описывающую распределение температуры в комнате.

Такая функция связывает координаты точки и значение физической величины – температуры в этой точке.

Это обычная функция, наподобие тех, с которыми вам приходилось решать примеры на школьной математике. Только эта функция зависит не от одной переменной x, а от трех переменных величин — координат x, y, z точек, расположенных в трехмерном пространстве.

\[\large \varphi = f \left( x ; y ; z \right)\]

А четвертая величина – температура, будет являться значением этой функции. Наподобие числа «y» для функции одной переменной «x».

Векторное поле

Предположим, что в углу комнаты лежит большой магнит. А мы ходим по комнате со шнурком, к одному концу которого привязан железный гвоздь. Второй конец шнурка держим в горизонтально вытянутой руке.

Расхаживая по комнате, мы заметим, что в некоторой области комнаты шнурок с гвоздем отклоняется от вертикального положения в сторону магнита.

Чем ближе мы подходим к магниту, тем сильнее он притягивает гвоздь. Тем больше усилий нужно приложить, чтобы удержать шнурок в руке.

Такие поля, наподобие поля, созданного магнитом, называют силовыми полями.

Поля силовые – это векторные поля, так как распределенная по комнате и измеренная в различных точках комнаты сила – это векторная величина.

Теперь каждой точке комнаты мы можем поставить в соответствие не только координаты точки, но и вектор F силы, действующей на гвоздь в этой точке.

Составим таблицу и запишем в нее координаты каждой выбранной точки комнаты и координаты вектора силы, с которой магнит действует на гвоздь в этой точке.

У вектора силы в каждой отдельной точке будут свои характеристики — длина и направление. Поэтому, таблица, содержащая информацию о силе в каждой точке комнаты, будет содержать 6 строк. Три строки – это координаты точки, и три строки – координаты вектора.

Такая таблица задает функцию, которую математики называют сокращенно «вектор-функцией».

Вектор-функцию, описывающую векторное поле, можно обозначить так:

\(\large \overrightarrow \) – вектор-функция. Подробнее можно записать ее таким способом:

\[\large \boxed < \overrightarrow= A_\left( x ; y ; z \right) \cdot \vec + A_\left( x ; y ; z \right) \cdot \vec + A_\left( x ; y ; z \right) \cdot \vec >\]

\( A_\left( x ; y ; z \right) ; A_\left( x ; y ; z \right) ; A_\left( x ; y ; z \right) \) – это компоненты (части) вектор функции.

Обычно в школе такие функции не изучают. Но вы теперь знаете, что кроме обычных — скалярных функций, существуют вектор-функции.

Из записи видно, что векторная функция отличается от скалярной тем, что имеет три компоненты (части). Каждая компонента (часть) зависит от трех координат точки P пространства.

Какое поле называют стационарным

Многие процессы, происходящие вокруг нас, изменяются во времени. Например, температура в полдень жаркого летнего дня будет выше, чем температура перед закатом этого же дня. Иными словами, скалярная величина – температура воздуха на улице, а значит и, ее поле, изменяются со временем.

В противоположность этому, поле температуры в закрытом помещении зимой изменяться не будет. Конечно, если батареи центрального отопления будут иметь одинаковую температуру в течение продолжительного времени.

Величины и процессы, изменяющиеся во времени, называют нестационарными. А стабильные, не изменяющиеся с течением времени величины – стационарными.

Если поле не изменяется с течением времени, его называют стационарным. А если изменяется – тогда нестационарным.

Все ли поля можно почувствовать

Мы можем чувствовать поле температур, благодаря тому, что на коже у нас содержатся особые рецепторы, способные воспринимать температуру окружающей среды.

Однако, не все поля люди могут ощущать. Например, мы невосприимчивы к магнитным и электрическим полям, потому, что у нас нет органа, способного улавливать их изменения.

Как же тогда мы узнали о электрических и магнитных полях? Мы нашли тех, кто может чувствовать эти поля.

Некоторые рыбы способны улавливать изменение электрического поля. Например, электрический скат (рис. 3) улавливает электрические сигналы и благодаря этому прекрасно ориентируется. У него есть для этого специальные органы, в отличие от человека. Отдельные скаты способны генерировать электрические разряды напряжением до 200 вольт.

Электрический скат

Электрический угорь (рис. 4) может достигать 2,5 метров в длину. Он способен не только улавливать электрические поля, но и генерировать мощные электрические разряды напряжением до 860 Вольт и силой тока до 1 Ампера. Использует их, преимущественно охотясь на добычу, или спасаясь от других хищников.

Электрический угорь

Способность улавливать изменение электрического поля называют электрорецепцией. Ее обнаружили у некоторых рыб, амфибий и млекопитающих – утконоса и ехидны. Она используется для охоты, общения и улавливания магнитного поля земли.

Перелетные птицы, например, журавли (рис. 5), содержат орган, способный улавливать изменение магнитного поля Земли. Благодаря этому они ориентируются в пространстве во время перелетов в теплые края.

Журавли в небе

Как мы можем обнаружить поле без помощи животных?

Для обнаружения электрического поля мы будем использовать электрический заряд. Потому, что поле действует электрической силой на заряды, помещенные в него.

А, чтобы обнаружить магнитное поле, мы можем воспользоваться небольшим магнитом, или железным предметом. Потому, что магнитное поле будет воздействовать на них.

Как обозначают поля на рисунках

Рассмотрим часть карты мира. Обратим внимание на то, что области частей карты закрашены различными цветовыми оттенками (рис. 6).

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

Примечание: Высоты и глубины на местности обозначают с помощью областей, имеющих различные цвета, для наглядности. Чем ближе к красному цвету, тем выше, а чем ближе к фиолетовому, тем глубже.

По краям цветовых областей проведены тонкие границы, они ограничивают области, имеющие одинаковый уровень высот. Такие границы называют линиями уровня.

Высота или уровень – это скалярная величина. Поэтому, мы можем сказать, что с помощью цветных областей и линий на их границах задано поле, описывающее распределение высот на поверхности Земли.

Скалярное поле можно изобразить с помощью линий уровня.

Вспомним теперь пример с магнитом и гвоздиком. В каждой точке комнаты можно нарисовать вектор силы, с которой магнит притягивает железный гвоздь (рис. 7).

Чем ближе к магниту, тем больше сила притяжения, тем длиннее векторы. Можно обратить внимание, что векторы силы как бы располагаются вдоль некоторых линий. Они дополнительно проведены пунктиром на рисунке. Видно, так же, что эти линии искривлены.

Такие линии, вдоль которых выстаиваются векторы силы, называют силовыми линиями. Силовые поля – векторные.

Векторные поля изображают с помощью силовых линий. Вдоль таких линий выстраиваются векторы сил. Эти линии имеют и другие названия.

Связь между скалярными и векторными полями

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

Чтобы обозначить резкие перепады высот, придумали использовать специальный вектор – вектор градиента. Он описывает, как быстро изменяется скалярная величина – например, высота на карте местности.

Этот вектор обозначают так:

Примечание: Градиент, от слова градация – его можно перевести, как сорт, или изменчивость. Например, градации яркости имеют различные оттенки серого цвета. В школьной физике вектор градиента обычно не рассматривают.

Градиент направлен в сторону наибольшего возрастания физической величины. А длина вектора градиента равна скорости, с которой возрастает физ. величина в этом направлении.

На разных участках карты присутствуют различные перепады высот, где-то высота изменяется быстрее, а где-то — медленнее. Значит, в различных областях местности вектор градиента будет иметь разную длину.

А если в пространстве распределена векторная величина, то говорят, что задано поле такой физ. величины.

Так, мы получили два связанных поля – скалярное поле высоты и векторное поле градиента, описывающее скорость изменения высоты в различных областях местности.

Для примера, описывая электрическое поле мы будем использовать две величины – скалярную — потенциал электростатического поля и векторную – напряженность электрического поля. Эти величины связаны между собой с помощью вектора градиента.

Однородные и неоднородные поля

Поле однородное, если в каждой точке пространства оно имеет одно и то же значение распределенной величины.

Например, температура во всех точках пространства имеет одно и то же значение. Или, электрическое поле действует на помещенный в него заряд во всех точках пространства с одной и той же силой.

Однородные силовые поля изображают прямыми линиями, расстояние между которыми не изменяется (рис. 8а).

Распределенные заряды могут создавать однородные поля. Электрическое поле, существующее между двумя заряженными параллельными плоскостями, однородное.

Если же в разных точках пространства поле действует на пробный заряд с различными силами, тогда поле называют неоднородным. Линии неоднородных полей кривые и расстояние между ними изменяется (рис. 8б).

Поле неоднородное, если в разных точках пространства оно имеет различные значения распределенной величины.

Например, поле магнита – это неоднородное поле, потому, что сила воздействия магнита возрастает по мере приближения к нему. Электрическое поле вокруг точечного заряда, так же неоднородное, потому, что сила воздействия на пробный заряд возрастает с уменьшением расстояния до заряда, создавшего поле.

По силовым линиям можно узнать величину поля. Чем гуще располагаются линии поля в какой-либо области, тем больше величина поля в этой области.

Примеры скалярных полей

Это поля распределения скалярных величин — плотности, давления, гравитационного и электростатического потенциалов, температуры, высот и т. п.

Поле плотности зарядов

Когда в трехмерном пространстве распределены заряды, мы можем говорить о плотности такого распределения. Плотность зарядов – величина скалярная. Ее распределение задает скалярное поле, описывается скалярной функцией.

Поле плотности тел

Если в пространстве распределена масса, то существует плотность распределения массы. Плотность тела – это скалярная функция, она задает скалярное поле.

Поле давления звуковой волны

Пусть в газе или жидкости распределяется звуковая волна. Звуковые волны являются поперечными волнами. По мере распространения волны в газе или жидкости возникают области сгущения и разряжения. Потому, что колеблется давление. Оно в различных точках пространства отличается. То есть, оно зависит от положения точки в пространстве. Когда скалярная величина – давление, распределена в пространстве, ее распределение описывается скалярной функцией. Эта функция задает скалярное поле.

Поле гравитационного потенциала — распределение потенциальной энергии

По закону всемирного тяготения, тела, имеющие массу, взаимно притягиваются. А если есть взаимодействие, то имеется потенциальная энергия такого взаимодействия. Распределение потенциальной энергии задается скалярной функцией, эта функция описывает скалярное поле и называется гравитационным потенциалом.

Поле распределения электрического потенциала

Заряды, находящиеся на некотором расстоянии, притягиваются, или отталкиваются. Значит, существует потенциальная энергия их взаимодействия. Распределение энергии описывается потенциалом системы заряженных частиц. Электрический потенциал является скалярной функцией, описывающей скалярное поле.

Примеры векторных полей

Это поля распределения векторных величин – сил, скоростей и т. д.

Гравитационное поле сил

Сила всемирного тяготения – это вектор, значит поле, описывающее гравитационное притяжение тел, будет векторным.

Поле скоростей потока жидкости

Когда жидкость течет, одни ее части в потоке двигаются быстрее других. Это значит, что скорости частиц жидкости различаются. Распределение скоростей частиц потока можно описать полем. Скорость – это вектор, значит, поле скоростей потока жидкости – это векторное поле.

Поле Кулоновских сил

Нам известно, что покоящиеся заряды притягиваются, или отталкиваются благодаря Кулоновским силам. Силы такого взаимодействия распределяются в пространстве и задают поле. Это электростатическое поле, оно является векторным полем напряженности.

Поле магнитных сил

Движущиеся заряды взаимодействуют благодаря магнитным полям. Индукция магнитного поля описывает, как сила взаимодействия изменяется в пространстве. Поэтому, индукция магнитного поля является вектор-функцией, задающей векторное магнитное поле.

Примечание: По сути, индукция магнитного поля – это сила, действующая на движущийся заряд со стороны других движущихся зарядов.

3.3. Хранимые функции Transact-SQL

С SQL Server вы можете создавать ваши собственные функции, добавляющие и расширяющие функции, предоставляемые системой. Функции могут получать 0 или более параметров и возвращать скалярное значение или таблицу. Входные параметры могут быть любого типа, исключая timestamp, cursor, table.

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

  • Скалярные функции – похожи на встроенные функции;
  • Функция, возвращающая таблицу — возвращает результат единичного оператора SELECT. Он похож на объект просмотра, но имеет большую эластичность благодаря использованию параметров, и расширяет возможности индексированного объекта просмотра;
  • Многооператорная функция — возвращает таблицу созданную одним или несколькими операторами Transact-SQL, чем напоминает хранимые процедуры. В отличие от процедур, на такие функции можно ссылаться в WHERE как на объект просмотра.

3.3.1. Создание хранимой функции

Создание функций очень похоже на создание процедур и объектов просмотра. Недаром мы рассматриваем все эти темы в одной главе. Для создания функции используется оператор CREATE FUNCTION. В зависимости от типа, Объявление будет отличаться. Рассмотрим все три типа объявления.

Функция, возвращающая таблицу:

3.3.2. Скалярные функции в Transact-SQL

Давайте для примера создадим функцию, которая будет возвращать скалярное значение. Например, результат перемножение цены на количество указанного товара. Товар будет идентифицироваться по названию и дате, ведь мы договорились, что сочетание этих полей дает уникальность. Но будьте осторожны, при тестировании запроса, если в разделе 3.2.8 вы выполнили запрос на изменение данных и создали дубликаты покупок за 1.1.2005-го года.

Итак, посмотрим сначала на код создание скалярной функции:

После оператора CREATE FUNCTION мы указываем имя функции. Далее, в скобках идут параметры, которые необходимо передать. Да, параметры должны передаваться через запятую в круглых скобках. В этом объявление отличается от процедур и эту разницу необходимо помнить.

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

Код, который должна выполнять функция пишется между ключевыми словами BEGIN (начало) и END (конец). В коде можно использовать любые операторы Transact-SQL, которые мы изучали ранее. Итак, объявление нашей функции в упрощенном виде можно описать следующим образом:

Между ключевыми словами BEGIN и END у нас выполняется следующий код:

В первой строке объявляется переменная @Summ. Она нужна для хранения промежуточного результата расчетов. Далее выполняется запрос SELECT, в котором происходит поиск строки по дате и названию товара в таблице товаров. В найденной строке перемножаются поля цены и количества, и результат записывается в переменную @Summ.

Обратите внимание, что в конце запроса стоит знак точки с запятой. Каждый запрос должен заканчиваться этим символом, но в большинстве примеров мы этим пренебрегали, но в функции отсутствие символа «;» может привести к ошибке.

В последней строке возвращаем результат. Для этого нужно написать ключевое слово RETURN, после которого пишется возвращаемое значение или переменная. В данном случае, возвращаться будет содержимое переменной @Summ.

Так как функция скалярная, то и возвращаемое значение должно быть скалярным и при этом соответствовать типу, описанному после ключевого слова RETURNS.

3.3.3. Использование функций

Как выполнить такую функцию? Да также, как и многие другие системные функции (например, GETDATE()). Например, следующий пример использует функцию в операторе SELECT:

В этом примере, оператор SELECT возвращает результат выполнения функции GetSumm. Функция принадлежит пользователю dbo, поэтому перед именем я указал владельца. После имени в скобках должны быть перечислены параметры в том же порядке, что и при объявлении функции. В данном примере я запрашиваю затраты на картофель, купленный 3.3.2005.

Выполните следующий запрос и убедитесь, что он вернул тот же результат, что и созданная нами функция:

Функции можно использовать не только в операторе SELECT, но и напрямую, присваивая значение переменной. Например:

В этом примере мы объявили переменную @Summ типа numeric(10,2). Именно такой тип возвращает функция. В следующей строке переменной присваивается результат выполнения Summ, с помощью SET.

Давайте посмотрим, что произойдет, если передать функции такие параметры, при которых запрос функции вернет более одной строки. В нашей таблице товаров сочетание даты и название не дает уникальности, потому что мы ее нарушили. Первичного ключа в таблице также нет, и среди товаров у меня есть четыре строки, которые имеют свои точные копии. Это нарушает правило уникальности строк в реляционных базах, но очень наглядно показывает, что в реальной жизни нарушать его нельзя.

Итак, в моей таблице есть две покупки хлеба 1.1.2005-го числа. Попробую запросить у функцию сумму:

Результатом будет только одно число, хотя строки две. А какую строку из двух вернул сервер? Никто точно сказать не может, потому что они обе одинаковые и без единого различия. Поэтому сервер скорей всего вернул первую из строк.

3.3.4. Функция, возвращающая таблицу

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

Начало функции такое же, как у скалярной – указываем оператор CREATE FUNCTION и имя функции. Я специально создал эту функцию без параметров, чтобы вы увидели, как это делается. Не смотря на то, что параметров нет, после имени должны идти круглые скобки, в которых не надо ничего писать. Если не указать скобок, то сервер вернет ошибку и функция не будет создана.

Разница есть и в секции RETURNS, после которой указывается тип TABLE, что говорит о необходимости вернуть таблицу. После этого идет ключевое слово AS и RETURN, после которого должно идти возвращаемое значение. Для функции данного типа в секции RETURN нужно в скобках указать запрос, результат которого и будет возвращаться функцией.

Когда пишете запрос, то все его поля должны содержать имена. Если одно из полей не имеет имени, то результатом выполнения оператора CREATE FUNCTION будет ошибка. В нашем примере последнее поле является результатом перемножения полей «Цена» и «Количество», а такие поля не имеют имени, поэтому мы его задаем с помощью ключевого слова AS.

Посмотрим, как можно использовать такую функцию с помощью оператора SELECT:

Так как мы используем простой оператор SELECT, то мы можем и ограничивать вывод определенными строками, с помощью ограничений в секции WHERE. Например, в следующем примере выбираем из результата функции только те строки, в которых поле «Количество» содержит значение 1:

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

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

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

Рассмотрим пример, функция GetPeoples у нас возвращает все строки таблицы. Чтобы получить только нужную фамилию, нужно писать запрос типа:

В этом случае будут выполняться два запроса: этот и еще один внутри функции. Но если передавать фамилию в качестве параметра в функцию и там сделать секцию WHERE, то можно обойтись и одним запросом SELECT:

3.3.5. Много операторная функция возвращающая таблицу

Все функции, созданные в разделе 3.3.5 могут возвращать таблицу, сгенерированную только одним оператором SQL. А как же тогда сделать возможность выполнять несколько операций? Например, вы можете захотеть выполнять дополнительные проверки входных параметров для обеспечения безопасности. Проверки лишними не бывает, особенно входных данных и особенно, если эти входные данные указываются пользователем.

Следующий пример показывает, как создать функцию, которая может вернуть в качестве результата таблицу, и при этом, в теле функции могут выполняться несколько операторов:

Это упрощенный вид создания процедуры. Более полный вид мы рассматривали в начале главы, а сейчас я упростил объявление, чтобы проще было его разбирать.

Объявление больше похоже на создание скалярных функций. Первая строка без изменений. В секции RETURNS объявляется переменная, которая имеет тип TABLE. После этого, в скобках нужно описать поля результирующей таблицы. После ключевого слова AS идtт пара операторов BEGIN и END, между которыми может выполняться какое угодно количество операций. Выполнение операций заканчивается ключевым словом RETURN.

Вот тут есть одно отличие от скалярных функций – после RETURN мы указывали имя переменной, значение которой должно стать результатом. В данном случае ничего указывать не надо. Мы уже объявили переменную в секции RETURNS и описали формат этой переменной. В теле функции мы можем и должны наполнить эту переменную значениями и именно это попадет в результат.

Теперь посмотрим на пример создания функции:

В данном примере в качестве результата объявлена переменная @ret, которая является таблицей из двух полей «idPeoples» типа int и «vcFIO» типа varchar длинной в 50 символов. В теле функции в эту таблицу записываются значения из таблицы tbPeoples и выполняется оператор RETURN, завершающий выполнение функции.

В использовании, такая функция ничем не отличается от рассмотренных ранее. Например, следующий запрос выбирает все данные, которые возвращает функция:

3.3.6. Опции функций

При создании функций могут использоваться следующие опции SCHEMABINDING (привязать к схеме) и/или ENCRYPTION (шифровать текст функции). Если вторая опция нам уже известна по вьюшкам и процедурам (позволяет шифровать исходный код функции в системных таблицах), то вторая встречается впервые, но при этом предоставляет удобное средство защиты данных.

Если функция создана с опцией SCHEMABINDING, то объекты базы данных, на которые ссылается функция, не могут быть изменены (с использованием оператора ALTER) или удалены (с помощью оператора DROP). Например, следующая функция использует таблицу tbPeoples и при этом используется опция SCHEMABINDING:

Функция может быть связанной со схемой, только если следующие ограничения истины:

  • все функции объявленные пользователем и просмотрщики на которые ссылается функция, также связаны со схемой с помощью опции SCHEMABINDING;
  • объекты, на которые ссылается функция, должны использовать имя из двух частей именования: owner.objectname. При создании функции GetPeoples2 ссылка на таблицу указана именно в таком формате – dbo.tbPeoples;
  • Функция и объекты должны быть расположены в одной базе данных;
  • Пользователь, который создает функцию, имеет право доступа ко всем объектам, на которые ссылается функция.

Создайте функцию и попробуйте после этого удалить таблицу tbPeoples.

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

Чтобы увидеть сообщение без удаления ключа, давайте добавим к таблице колонку, а потом попробуем ее удалить:

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

3.3.7. Изменение функций

Вы можете изменять функцию с помощью оператора ALTER FUNCTION. Общий вид для каждого варианта функции отличается. Давайте рассмотрим каждый из них.

1. Общий вид команды изменения скалярной функции:

2. Общий вид изменения функции, возвращающей таблицу:

3. Общий вид команды изменения функции с множеством операторов, возвращающей таблицу.

Следующий пример показывает упрощенный вариант команды, изменяющей функцию:

3.3.8. Удаления функций

Если вы внимательно читали об объектах просмотра и функциях, то не трудно догадаться, как можно удалить функцию. Конечно же для этого используется оператор DROP FUNCTION:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *