Поделиться через


Вызовы скалярных функций

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

{fn скалярная функция }

где скалярная функция является одной из функций, перечисленных в приложении E: Скалярные функции. Дополнительные сведения о escape-последовательности скалярной функции см. в статье "Скалярная функция escape-последовательность " в приложении C: грамматика SQL.

Например, следующие инструкции SQL создают тот же результирующий набор имен клиентов верхнего регистра. Первый оператор использует синтаксис escape-последовательности. Вторая инструкция использует собственный синтаксис для входящего трафика для ОС/2 и не совместим.

SELECT {fn UCASE(Name)} FROM Customers  
  
SELECT uppercase(Name) FROM Customers  

Приложение может смешивать вызовы скалярных функций, использующих собственный синтаксис и вызовы скалярных функций, использующих синтаксис ODBC. Например, предположим, что имена в таблице Employee хранятся в виде фамилии, запятой и имени. Следующая инструкция SQL создает результирующий набор фамилий сотрудников в таблице Employee. Инструкция использует скалярную функцию ODBC SUBSTRING и скалярную функцию SQL Server CHARINDEX и будет правильно выполняться только в SQL Server.

SELECT {fn SUBSTRING(Name, 1, CHARINDEX(',', Name) - 1)} FROM Customers  

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

CONVERT( value_exp , data_type)

где value_exp является именем столбца, результатом другой скалярной функции или литеральным значением, а data_type — ключевое слово, соответствующее имени #define, которое используется идентификатором типа данных SQL, как определено в приложении D: Типы данных. Например, следующая инструкция SQL использует функцию CONVERT , чтобы убедиться, что выходные данные функции CURDATE являются датой, а не метками времени или символьными данными:

INSERT INTO Orders (OrderID, CustID, OpenDate, SalesPerson, Status)  
   VALUES (?, ?, {fn CONVERT({fn CURDATE()}, SQL_DATE)}, ?, ?)  

Чтобы определить, какие скалярные функции поддерживаются источником данных, приложение вызывает SQLGetInfo с параметрами SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS и SQL_TIMEDATE_FUNCTIONS. Чтобы определить, какие операции преобразования поддерживаются функцией CONVERT , приложение вызывает SQLGetInfo с любыми параметрами, начинающимися с SQL_CONVERT.