Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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.