Встроенные и хранимые функции в SQL


Встроенные (системные) функции

1) Список стандартных функций

ФункцияВозвращаемый результат
Bit_Length(<строка>)Количество битов в <строке>
Cast(<значение> As <тип данных>)<значение>, преобразованное в указанный <тип данных>
Char[acter]_Length(<строка>)Длина <строки> символов
Convert(<строка> using <функция>)<строка>, преобразованная в соответствии с указанной <функцией>
Current_DateТекущая дата
Current_Time(<точность>)Текущее время с указанной <точностью>
Current_TimeStamp(<точность>)Текущая дата и время с указанной <точностью>
Extract(<часть> from <значение>)Указанная <часть> (Day, Hour и т.п.) из <значения> даты
Lower(<строка>)<строка>, преобразованная к нижнему регистру
Octet_Length(<строка>)Число байтов в <строке>
Position(<строка1> in <строка2>)Позиция, с которой <строка1> входит в <строку2>
Substring(<строка> from for <длина>)Часть <строки>, начинающаяся с позиции и имеющая указанную <длину>
Trim(Leading|Trailing|Both <символ> from <строка>)<строка>, у которой удалены ведущие | концевые | с обоих сторон <символы>
Upper(<строка>)<строка>, преобразованная к верхнему регистру
UserОпределяет идентификатор пользователя

2) Обзор функций MS SQL Server
Так в SQL Server предусмотрено много функций, разделенных на следующие группы:
→ Строковые;
→ Математические;
→ Преобразования;
→ Для работы с данными типа Text и Image;
→ Для работы с датами;
→ Системные;
→ Ниладические (нульместные – без параметров).
А так же целый ряд других функций.

3) Обзор функций Oracle
→ Для работы с ошибками;
→ Числовые;
→ Строковые;
→ Преобразования;
→ Трансляции, для работы с датами;
→ Различного назначения.

Объявление хранимой функции

CREATE FUNCTION <имя функции> ([<имя параметра> <тип данных> [(<размер>)], …]) RETURNS <тип данных> [(<размер>)] [[NOT] DETERMINISTIC] [CONTAINS SQL|READS SQL DATA|MODIFIES SQL DATA]
BEGIN
<SQL-операторы>
RETURN <возвращаемое значение>
END

Ключевые слова
[NOT] DETERMINISTIC показывает, возвращает или нет функция одинаковые значения при одних и тех же входных значениях. Например, функция CURRENT_TIME является NOT DETERMINISTIC.
CONTAINS SQL показывает, что в функции нет SQL-операторов, читающих и модифицирующих данные. Это значение установлено по умолчанию.
READS SQL DATA показывает, что функция содержит инструкции SELECT или FETCH.
MODIFIES SQL DATA показывает, что функция содержит инструкции INSERT, UPDATE или DELETE.

Ограничения на недетерминистские функции

В Oracle:
• Недетерминистские функции нельзя использовать при проверке ограничений в выражении CHECK. Кроме того, в ограничения нельзя включать вызов определяемых пользователем функций.
• Недетерминистские функции нельзя использовать в индексах, основанных на функциях.

В SQL Server пользовательская функция считается детерминистическое, если:
• Функция является привязанной к схеме, т.е. функция создана с использованием опции SCHEMABINDING, а это означает, что объекты, на которые ссылается данная функция, не могут изменяться или удаляться.
• Каждая функция (неважно, встроенная или определяемая пользователем), вызываемая из тела этой функции, является детерминистской.
• В теле функции отсутствуют ссылки на объекты БД (например, таблицы, представления и другие функции), выходившие за пределы области видимости.
• Функция не обращается к расширенным хранимым процедурам (которые могут изменять состояние БД).

Удаление и изменение хранимых функций

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

DROP FUNCTION <имя функции>

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

ALTER FUNCTION <имя функции> ([[{IN|OUT|INOUT}] <имя параметра> <тип данных> [(<размер>)],…])
BEGIN
<SQL-операторы>
RETURN <возвращаемое значение>
END

Хранимые функции в SQL Server

CREATE FUNCTION <имя функции> ([@<имя параметра> [AS] <тип данных> [(<размер>)] [=<значение по умолчанию>] [READONLY],…])
RETURNS <тип данных> [(<размер>)]
[AS]
BEGIN
<SQL-операторы>
RETURN <скалярное значение>
END

Пример:

USE B1;
GO
CREATE FUNCTION Quarter(@Dat DateTime) RETURNS int
BEGIN
DECLARE @ISQuarter int;
IF ((Month(@Dat)>=1) And (Month(@Dat)<=3)) SET @ISQuarter=1; IF ((Month(@Dat)>=4) And (Month(@Dat)<=6)) SET @ISQuarter=2; IF ((Month(@Dat)>=8) And (Month(@Dat)<=9)) SET @ISQuarter=3; IF ((Month(@Dat)>=10) And (Month(@Dat)<=12)) SET @ISQuarter=4; RETURN @ISQuarter END SELECT DISTINCT dbo. Quarter(Dat) AS QT From Orders

Результат: QT 4


Комментарии запрещены.




Статистика