Sdílet prostřednictvím


Volání skalární funkce

Skalární funkce vrací hodnotu pro každý řádek. Například skalární funkce absolutní hodnoty přebírá jako argument číselný sloupec a vrací absolutní hodnotu každé hodnoty ve sloupci. Řídicí sekvence pro volání skalární funkce je

{fnscalar-function}

kde skalární funkce je jednou z funkcí uvedených v dodatku E: Skalární funkce. Více informací o únikové sekvenci skalární funkce najdete v dodatku C: Gramatika SQL, v části Řídicí sekvence skalární funkce.

Například následující příkazy SQL vytvoří stejnou sadu výsledků s velkými názvy zákazníků. První příkaz používá syntaxi escape sekvence. Druhý příkaz používá nativní syntaxi pro Ingres pro OS/2 a není interoperabilní.

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

Aplikace může kombinovat volání skalárních funkcí, které používají nativní syntaxi a volání skalárních funkcí, které používají syntaxi ODBC. Předpokládejme například, že jména v tabulce Zaměstnanec se ukládají jako příjmení, čárka a křestní jméno. Následující příkaz SQL vytvoří sadu příjmení zaměstnanců v tabulce Zaměstnanec. Příkaz používá skalární funkci ODBC SUBSTRING a skalární funkci SQL Serveru CHARINDEX a provede se správně pouze na SQL Serveru.

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

Pro maximální interoperabilitu by aplikace měly použít skalární funkci CONVERT , aby se zajistilo, že výstup skalární funkce je požadovaný typ. Funkce CONVERT převede data z jednoho datového typu SQL na zadaný datový typ SQL. Syntaxe funkce CONVERT je

CONVERT(value_exp;data_type)

kde value_exp je název sloupce, výsledek jiné skalární funkce nebo literálové hodnoty a data_type je klíčové slovo, které odpovídá názvu #define používanému identifikátorem datového typu SQL, jak je definováno v dodatku D: Datové typy. Například následující příkaz SQL používá funkci CONVERT , aby se zajistilo, že výstup funkce CURDATE je datum místo časového razítka nebo znakových dat:

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

Pokud chcete určit, které skalární funkce jsou podporovány zdrojem dat, aplikace volá SQLGetInfo s možnostmi SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS a SQL_TIMEDATE_FUNCTIONS. Chcete-li zjistit, které převodní operace jsou podporovány funkcí CONVERT , aplikace volá SQLGetInfo s některou z možností, které začínají SQL_CONVERT.