Condividi tramite


Chiamate di funzioni scalari

Le funzioni scalari restituiscono un valore per ogni riga. Ad esempio, la funzione scalare del valore assoluto considera una colonna numerica come argomento e restituisce il valore assoluto di ciascun valore nella colonna. La sequenza di escape per chiamare una funzione scalare è

{fn scalar-function }

dove scalar-function è una delle funzioni elencate nell'Appendice E: Funzioni scalari. Per altre informazioni sulla sequenza di escape delle funzioni scalari, vedere Sequenza di escape delle funzioni scalari nell'Appendice C: Grammatica SQL.

Ad esempio, le istruzioni SQL seguenti creano lo stesso set di risultati di nomi cliente in maiuscolo. La prima istruzione usa la sintassi della sequenza di escape. La seconda istruzione usa la sintassi nativa per Ingres per OS/2 e non è interoperabile.

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

Un'applicazione può combinare chiamate a funzioni scalari che usano la sintassi nativa e chiamate a funzioni scalari che usano la sintassi ODBC. Si supponga, ad esempio, che i nomi nella tabella Employee vengano archiviati come cognome, virgola e nome. L'istruzione SQL seguente crea un set di risultati di cognome dei dipendenti nella tabella Employee. L'istruzione usa la funzione scalare ODBC SUBSTRING e la funzione scalare di SQL Server CHARINDEX e le eseguirà correttamente solo in SQL Server.

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

Per garantire la massima interoperabilità, le applicazioni devono usare la funzione scalare CONVERT per assicurarsi che l'output di una funzione scalare sia il tipo richiesto. La funzione CONVERT converte i dati da un tipo di dati SQL al tipo di dati SQL specificato. La sintassi della funzione CONVERT è

CONVERT( value_exp , data_type)

dove value_exp è un nome di colonna, il risultato di un'altra funzione scalare o un valore letterale e data_type è una parola chiave che corrisponde al nome #define usato da un identificatore del tipo di dati SQL come definito nell'Appendice D: Tipi di dati. Ad esempio, l'istruzione SQL seguente usa la funzione CONVERT per assicurarsi che l'output della funzione CURDATE sia una data, anziché data e ora o dati di tipo carattere:

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

Per stabilire quali funzioni scalari sono supportate da un'origine dati, un'applicazione chiama SQLGetInfo con le opzioni di SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS e SQL_TIMEDATE_FUNCTIONS. Per determinare quali operazioni di conversione sono supportate dalla funzione CONVERT, un'applicazione chiama SQLGetInfo con una delle opzioni che iniziano con SQL_CONVERT.