Parametri delle istruzioni

Un parametro è una variabile in un'istruzione SQL. Si supponga, per esempio, che una tabella Parti contenga colonne denominate IDParte, Descrizione e Prezzo. Per aggiungere una parte senza parametri, sarebbe necessario costruire un'istruzione SQL come:

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

Anche se questa istruzione inserisce un nuovo ordine, non è una buona soluzione per un'applicazione di registrazione ordini perché i valori da inserire non possono essere hardcoded nell'applicazione. Un'alternativa consiste nel costruire l'istruzione SQL in fase di esecuzione, usando i valori da inserire. Neanche questa è una buona soluzione, a causa della complessità della creazione di istruzioni in fase di esecuzione. La soluzione migliore consiste nel sostituire gli elementi della clausola VALUES con punti interrogativi (?) o marcatori di parametro:

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

Gli indicatori di parametro vengono quindi associati a variabili dell'applicazione. Per aggiungere una nuova riga, l'applicazione deve solo impostare i valori delle variabili ed eseguire l'istruzione. Il driver recupera quindi i valori correnti delle variabili e li invia all'origine dati. Se l'istruzione verrà eseguita più volte, l'applicazione potrà rendere ancora più efficiente il processo preparando l'istruzione.

L'istruzione appena illustrata potrebbe essere hardcoded in un'applicazione di registrazione ordini per inserire una nuova riga. Tuttavia, i marcatori di parametro non sono limitati alle applicazioni verticali. Per qualsiasi applicazione, semplificano la difficoltà di costruire istruzioni SQL in fase di esecuzione evitando conversioni da e verso il testo. Ad esempio, l'ID parte appena mostrato è probabilmente archiviato nell'applicazione come numero intero. Se l'istruzione SQL viene costruita senza marcatori di parametro, l'applicazione deve convertire l'ID parte in testo e l'origine dati deve convertirla di nuovo in un numero intero. Usando un marcatore di parametro, l'applicazione può inviare l'ID parte al driver come numero intero, che in genere a sua volta può inviarlo all'origine dati come numero intero. In questo modo vengono risparmiate due conversioni. Per i valori di dati lunghi, ciò è molto importante, perché le forme di testo di tali valori superano spesso la lunghezza consentita di un'istruzione SQL.

I parametri sono validi solo in determinate postazioni nelle istruzioni SQL. Ad esempio, non sono consentiti nell'elenco di selezione (l'elenco di colonne che devono essere restituire da un'istruzione SELECT), né sono consentiti come operandi di un operatore binario come il segno di uguale (=), perché sarebbe impossibile determinare il tipo di parametro. In genere, i parametri sono validi solo nelle istruzioni DML (Data Manipulation Language) e non nelle istruzioni DDL (Data Definition Language). Per altre informazioni, vedere Marcatori di parametro nell'Appendice C: Grammatica SQL.

Quando l'istruzione SQL richiama una procedura, è possibile usare i parametri denominati. I parametri denominati vengono identificati dai relativi nomi, non dalla loro posizione nell'istruzione SQL. Possono essere associati da una chiamata a SQLBindParameter, ma il parametro viene identificato dal campo SQL_DESC_NAME del descrittore del parametro di implementazione (IPD), non dall'argomento ParameterNumber di SQLBindParameter. Possono anche essere associati chiamando SQLSetDescField o SQLSetDescRec. Per altre informazioni sui parametri denominati, vedere Associare parametri dal nome (parametri denominati), più avanti in questa sezione. Per altre informazioni sui descrittori, vedere Descrittori.

Questa sezione descrive gli argomenti seguenti: