Condividi tramite


Parametri di procedura

I parametri nelle chiamate di procedura possono essere parametri di input, input/output o output. Questo è diverso dai parametri in tutte le altre istruzioni SQL, che sono sempre parametri di input.

I parametri di input vengono usati per inviare valori alla procedura. Si supponga, per esempio, che la tabella Parti contenga le colonne IDParte, Descrizione e Prezzo. La procedura InsertPart potrebbe avere un parametro di input per ogni colonna della tabella. Per esempio:

{call InsertPart(?, ?, ?)}  

Un driver non deve modificare il contenuto di un buffer di input finché SQLExecDirect o SQLExecute non restituiscono SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE o SQL_NO_DATA. Il contenuto del buffer di input non deve essere modificato mentre SQLExecDirect o SQLExecute restituiscono SQL_NEED_DATA o SQL_STILL_EXECUTING.

I parametri di input/output vengono usati sia per inviare valori alle procedure sia per recuperare valori dalle procedure. Bisogna evitare l'uso dello stesso parametro come parametro di input e output, in quanto tende a confondere. Si supponga, per esempio, che una procedura accetti un ID ordine e restituisca l'ID del cliente. Questo valore può essere definito con un singolo parametro di input/output:

{call GetCustID(?)}  

Potrebbe essere preferibile usare due parametri: un parametro di input per l'ID ordine e un parametro di output o input/output per l'ID cliente:

{call GetCustID(?, ?)}  

I parametri di output vengono usati per recuperare il valore restituito della procedura e per recuperare i valori dagli argomenti della procedura; talvolta, le procedure che restituiscono valori sono note come funzioni. Si supponga, per esempio, che la procedura GetCustID appena menzionata restituisca un valore che indichi la riuscita o meno della ricerca dell'ordine. Nella chiamata seguente, il primo parametro è un parametro di output usato per recuperare il valore restituito dalla procedura, il secondo parametro è un parametro di input usato per specificare l'ID ordine e il terzo parametro è un parametro di output usato per recuperare l'ID cliente:

{? = call GetCustID(?, ?)}  

I driver gestiscono i valori per i parametri di input e input/output nelle procedure nello stesso modo in cui gestiscono i parametri di input in altre istruzioni SQL. Quando l'istruzione viene eseguita, recuperano i valori delle variabili associate a questi parametri e li inviano all'origine dati.

Dopo l'esecuzione dell'istruzione, i driver archiviano i valori restituiti dei parametri di input/output e di output nelle variabili associate a tali parametri. Non c’è garanzia che questi valori restituiti vengano impostati fino a quando tutti i risultati restituiti dalla procedura sono stati recuperati e SQLMoreResults ha restituito SQL_NO_DATA. Se l'esecuzione dell'istruzione genera un errore, il contenuto del buffer del parametro di input/output o del buffer del parametro di output non è definito.

Un'applicazione chiama SQLProcedure per determinare se una procedura ha un valore restituito. Chiama SQLProcedureColumns per determinare il tipo (valore restituito, input, input/output o output) di ogni parametro della procedura.