Compartilhar via


Parâmetros de procedimento

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

Parâmetros de entrada são usados para enviar valores para o procedimento. Por exemplo, suponha que a tabela Parts tenha colunas PartID, Description e Price. O procedimento InsertPart pode ter um parâmetro de entrada para cada coluna na 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.

Parâmetros de entrada/saída são usados para enviar valores para procedimentos e recuperar valores de procedimentos. Usar o mesmo parâmetro que um parâmetro de entrada e 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 único parâmetro de entrada/saída:

{call GetCustID(?)}  

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

{call GetCustID(?, ?)}  

Parâmetros de saída são usados para recuperar o valor retornado do procedimento e recuperar valores de argumentos de procedimento; os procedimentos que retornam valores às vezes são conhecidos como funções. Por exemplo, suponha que o procedimento GetCustID apenas mencionado retorne um valor que indica se ele foi capaz de 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 a ID do pedido e o terceiro parâmetro é um parâmetro de saída usado para recuperar a ID do cliente:

{? = call GetCustID(?, ?)}  

Os drivers manipulam valores para parâmetros de entrada e entrada/saída em procedimentos da mesma forma 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.

Após a execução da instrução, os drivers armazenam os valores retornados dos parâmetros de entrada/saída e saída nas variáveis associadas a esses parâmetros. Esses valores retornados não têm garantia de serem 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 um erro, o conteúdo do buffer do parâmetro de entrada/saída ou do buffer de parâmetro 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.