Parâmetros de procedimento

Os parâmetros em chamadas de procedimento podem ser parâmetros de entrada, entrada/saída ou de saída. Isso é diferente dos parâmetros em todas as outras instruções SQL, que sempre são parâmetros de entrada.

Os parâmetros de entrada são usados para enviar valores ao procedimento. Por exemplo, suponha que a tabela Parts tenha as colunas PartID, Description e Price. O procedimento InsertPart pode ter um parâmetro de entrada para cada coluna nessa tabela. Por exemplo:

{call InsertPart(?, ?, ?)}  

Um driver não deve modificar o conteúdo de um buffer de entrada até que SQLExecDirect ou SQLExecute retorne SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE ou SQL_NO_DATA. O conteúdo do buffer de entrada não deve ser modificado enquanto SQLExecDirect ou SQLExecute retorna SQL_NEED_DATA ou SQL_STILL_EXECUTING.

Os parâmetros de entrada/saída são usados tanto para enviar valores para procedimentos quanto para recuperar valores de procedimentos. O uso do mesmo parâmetro como um parâmetro de entrada e um parâmetro de saída tende a ser confuso e deve ser evitado. Por exemplo, suponha que um procedimento aceite uma ID do pedido e retorne a ID do cliente. Isso pode ser definido com um só parâmetro de entrada/saída:

{call GetCustID(?)}  

Talvez seja melhor usar dois parâmetros: um parâmetro de entrada para o ID do pedido e um parâmetro de saída ou entrada/saída para o ID do cliente:

{call GetCustID(?, ?)}  

Os parâmetros de saída são usados para recuperar o valor retornado do procedimento e para recuperar valores dos argumentos do procedimento. Os procedimentos que retornam valores às vezes são conhecidos como funções. Por exemplo, suponha que o procedimento GetCustID mencionado retorne um valor que indica se ele conseguiu localizar a ordem. Na chamada a seguir, o primeiro parâmetro é um parâmetro de saída usado para recuperar o valor retornado do procedimento, o segundo parâmetro é um parâmetro de entrada usado para especificar o ID do pedido e o terceiro parâmetro é um parâmetro de saída usado para recuperar o ID do cliente:

{? = call GetCustID(?, ?)}  

Os drivers manipulam valores para parâmetros de entrada e entrada/saída em procedimentos do mesmo modo que os parâmetros de entrada em outras instruções SQL. Quando a instrução é executada, eles recuperam os valores das variáveis associadas a esses parâmetros e os enviam para a fonte de dados.

Depois que a instrução tiver sido executada, os drivers armazenarão os valores retornados dos parâmetros de entrada/saída e saída nas variáveis associadas a esses parâmetros. Não há garantia de que esses valores retornados serão definidos até que todos os resultados retornados pelo procedimento tenham sido buscados e SQLMoreResults tenha retornado SQL_NO_DATA. Se a execução da instrução resultar em erro, o conteúdo do buffer de parâmetros de entrada/saída ou do buffer de parâmetros de saída será indefinido.

Um aplicativo chama SQLProcedure para determinar se um procedimento tem um valor retornado. Ele chama SQLProcedureColumns para determinar o tipo (valor retornado, entrada, entrada/saída ou saída) de cada parâmetro de procedimento.