Parâmetros de instrução

Um parâmetro é uma variável em uma instrução SQL. Por exemplo, suponha que uma tabela Peças tenha colunas denominadas PartID, Descrição e Preço. Adicionar uma parte sem parâmetros exigiria a criação de uma instrução SQL como:

INSERT INTO Parts (PartID, Description, Price) VALUES (2100, 'Drive shaft', 50.00)  

Embora esta instrução insira uma nova ordem, ela não é uma boa solução para um aplicativo de entrada de ordem, pois os valores a serem inseridos não podem ser embutidos em código no aplicativo. Uma alternativa é criar a instrução SQL em tempo de execução, usando os valores a serem inseridos. Essa também não é uma boa solução, devido à complexidade da criação de instruções em tempo de execução. A melhor solução é substituir os elementos da cláusula VALUES por pontos de interrogação (?) ou marcadores de parâmetro:

INSERT INTO Parts (PartID, Description, Price) VALUES (?, ?, ?)  

Os marcadores de parâmetro são associados a variáveis do aplicativo. Para adicionar uma nova linha, o aplicativo precisa apenas definir os valores das variáveis e executar a instrução. O driver recupera os valores atuais das variáveis e os envia para a fonte de dados. Se a instrução for executada diversas vezes, o aplicativo poderá tornar o processo ainda mais eficiente preparando a instrução.

A instrução mostrada acima pode ser embutida em código em um aplicativo de entrada de ordem para inserir uma nova linha. Contudo, os marcadores de parâmetros não estão limitados a aplicativos verticais. Para qualquer aplicativo, eles facilitam a criação de instruções SQL em tempo de execução, evitando conversões de e para texto. Por exemplo, a ID da parte que acabamos de mostrar provavelmente está armazenada no aplicativo como um número inteiro. Se a instrução SQL for criada sem marcadores de parâmetro, o aplicativo deverá converter a ID da parte em texto, e a fonte de dados deverá convertê-la novamente em um número inteiro. Usando um marcador de parâmetro, o aplicativo pode enviar a ID da parte ao driver como um número inteiro, que, normalmente, pode enviá-lo à fonte de dados como um número inteiro. Isso economiza duas conversões. Para valores de dados longos, isso é muito importante, pois os formatos de texto desses valores excedem frequentemente o comprimento permitido de uma instrução SQL.

Os parâmetros são válidos apenas em determinados locais nas instruções SQL. Por exemplo, não são permitidos na lista de seleção (a lista de colunas a serem retornadas por uma instrução SELECT), nem são permitidos como ambos os operandos de um operador binário, como o sinal de igual (=), pois seria impossível determinar o tipo de parâmetro. Geralmente, os parâmetros são válidos apenas em instruções de DML (linguagem de manipulação de dados), não em instruções de DDL (linguagem de definição de dados). Para obter mais informações, consulte Marcadores de parâmetro no Apêndice C: gramática SQL.

Quando a instrução SQL invoca um procedimento, podem ser usados parâmetros nomeados. Os parâmetros nomeados são identificados por seus nomes, não por sua posição na instrução SQL. Podem ser vinculados por uma chamada a SQLBindParameter, mas o parâmetro é identificado pelo campo SQL_DESC_NAME do IPD (descritor de parâmetro de implementação), não pelo argumento ParameterNumber de SQLBindParameter. Também podem ser vinculados chamando SQLSetDescField ou SQLSetDescRec. Para obter mais informações sobre parâmetros nomeados, consulte Vinculação de parâmetros por nome (parâmetros nomeados), mais adiante nesta seção. Para obter mais informações sobre descritores, consulte Descritores.

Esta seção contém os tópicos a seguir.