Partilhar via


Chamadas de função escalar

As funções escalares retornam um valor para cada linha. Por exemplo, a função escalar de valor absoluto toma uma coluna numérica como argumento e devolve o valor absoluto de cada valor na coluna. A sequência de escape para chamar uma função escalar é

{fnfunção escalar}

onde a função escalar é uma das funções listadas no Apêndice E: Funções Escalares. Para mais informações sobre a sequência de escape da função escalar, veja Sequência de Escape da Função Escalar no Apêndice C: Gramática SQL.

Por exemplo, as seguintes instruções SQL criam o mesmo conjunto de resultados de nomes maiúsculos dos clientes. A primeira declaração utiliza a sintaxe da sequência de escape. A segunda instrução usa a sintaxe nativa do Ingres para OS/2 e não é interoperável.

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

Uma aplicação pode misturar chamadas para funções escalares que usam sintaxe nativa e chamadas para funções escalares que usam sintaxe ODBC. Por exemplo, assuma que os nomes na tabela Employee são armazenados como apelido, vírgula e primeiro nome. A seguinte instrução SQL cria um conjunto de resultados com os apelidos dos colaboradores na tabela Employee. A instrução utiliza a função escalar ODBC SUBSTRING e a função escalar do SQL Server CHARINDEX e só será executada corretamente no SQL Server.

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

Para máxima interoperabilidade, as aplicações devem usar a função escalar CONVERT para garantir que a saída de uma função escalar é do tipo necessário. A função CONVERT converte dados de um tipo de dado SQL para o tipo de dado SQL especificado. A sintaxe da função CONVERT é

CONVERT(value_exp,data_type)

onde value_exp é o nome de uma coluna, o resultado de outra função escalar ou um valor literal, e data_type é uma palavra-chave que corresponde ao nome #define usado por um identificador de tipo de dado SQL conforme definido no Apêndice D: Tipos de Dados. Por exemplo, a seguinte instrução SQL utiliza a função CONVERT para garantir que a saída da função CURDATE é uma data, em vez de um carimbo temporal ou dados de caracteres:

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

Para determinar quais as funções escalares suportadas por uma fonte de dados, uma aplicação chama SQLGetInfo com as opções SQL_CONVERT_FUNCTIONS, SQL_NUMERIC_FUNCTIONS, SQL_STRING_FUNCTIONS, SQL_SYSTEM_FUNCTIONS e SQL_TIMEDATE_FUNCTIONS. Para determinar quais as operações de conversão suportadas pela função CONVERT , uma aplicação chama SQLGetInfo com qualquer uma das opções que começam por SQL_CONVERT.