Condividi tramite


Parametri della procedura

I parametri nelle chiamate di routine 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 routine. Si supponga, ad esempio, che la tabella Parts contenga colonne PartID, Description e Price. La routine 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 restituisce 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 restituisce SQL_NEED_DATA o SQL_STILL_EXECUTING.

I parametri di input/output vengono usati entrambi per inviare valori alle routine e recuperare valori dalle procedure. L'uso dello stesso parametro di un input e di un parametro di output tende a confondere e deve essere evitato. Si supponga, ad 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 routine e per recuperare i valori dagli argomenti della routine; le procedure che restituiscono valori sono talvolta note come funzioni. Si supponga, ad esempio, che la routine GetCustID appena menzionata restituisca un valore che indica se è stato in grado di trovare l'ordine. Nella chiamata seguente il primo parametro è un parametro di output usato per recuperare il valore restituito della routine, 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 in modo non diverso rispetto ai parametri di input in altre istruzioni SQL. Quando l'istruzione viene eseguita, recuperano i valori delle variabili associate a questi parametri e le 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. Questi valori restituiti non vengono sicuramente 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 dei parametri di input/output o del buffer dei parametri di output non è definito.

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