Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Um procedimento é um objeto executável armazenado na fonte de dados. Geralmente, são uma ou mais instruções SQL que foram pré-compiladas. A sequência de escape para chamar um procedimento é
{[?=]chamarnome-procedimento[([parâmetro][,[parâmetro]]... )]}
onde o nome do procedimento especifica o nome de um procedimento e o parâmetro especifica um parâmetro de procedimento.
Para mais informações sobre a sequência de escape de chamadas de procedimento, consulte Sequência de Escape de Chamadas de Procedimento no Apêndice C: Gramática SQL.
Um procedimento pode ter parâmetros zero ou mais. Também pode devolver um valor, indicado pelo marcador opcional de parâmetro ?= no início da sintaxe. Se o parâmetro for de entrada ou de entrada/saída, pode ser literal ou marcador de parâmetro. No entanto, aplicações interoperáveis devem sempre usar marcadores de parâmetros porque algumas fontes de dados não aceitam valores literais de parâmetro. Se o parâmetro for um parâmetro de saída, deve ser um marcador de parâmetro. Os marcadores de parâmetros devem ser atribuídos com SQLBindParameter antes de a instrução de chamada de procedimento ser executada.
Os parâmetros de entrada e entrada/saída podem ser omitidos das chamadas de procedimentos. Se um procedimento for chamado com parênteses mas sem quaisquer parâmetros, como {call procedure-name()}, o driver instrui a fonte de dados a usar o valor padrão para o primeiro parâmetro. Se o procedimento não tiver quaisquer parâmetros, isso pode causar a falha do procedimento. Se um procedimento for chamado sem parênteses, como {call procedure-name}, o driver não envia quaisquer valores de parâmetro.
Os literais podem ser especificados para parâmetros de entrada e entrada/saída nas chamadas de procedimentos. Por exemplo, suponha que o procedimento InsertOrder tem cinco parâmetros de entrada. A chamada seguinte ao InsertOrder omite o primeiro parâmetro, fornece um literal para o segundo parâmetro e utiliza um marcador de parâmetro para o terceiro, quarto e quinto parâmetros:
{call InsertOrder(, 10, ?, ?, ?)} // Not interoperable!
Note que, se um parâmetro for omitido, a vírgula que o delimita dos outros parâmetros deve continuar a aparecer. Se um parâmetro de entrada ou entrada/saída for omitido, o procedimento utiliza o valor padrão do parâmetro. Outra forma de especificar o valor padrão de um parâmetro de entrada ou entrada/saída é definir o valor do buffer de comprimento/indicador ligado ao parâmetro para SQL_DEFAULT_PARAM.
Se um parâmetro de entrada/saída for omitido ou se for fornecido um literal para o parâmetro, o driver descarta o valor de saída. De forma semelhante, se o marcador de parâmetro para o valor de retorno de um procedimento for omitido, o controlador descarta o valor de retorno. Finalmente, se uma aplicação especificar um parâmetro de valor de retorno para um procedimento que não devolve um valor, o driver define o valor do buffer de comprimento/indicador ligado ao parâmetro para SQL_NULL_DATA.
Suponha que o procedimento PARTS_IN_ORDERS cria um conjunto de resultados que contém uma lista de encomendas que contêm um número de peça específico. O seguinte código designa este procedimento para o número de peça 544:
SQLUINTEGER PartID;
SQLINTEGER PartIDInd = 0;
// Bind the parameter.
SQLBindParameter(hstmt, 1, SQL_PARAM_INPUT, SQL_C_SLONG, SQL_INTEGER, 0, 0,
&PartID, 0, PartIDInd);
// Place the department number in PartID.
PartID = 544;
// Execute the statement.
SQLExecDirect(hstmt, "{call PARTS_IN_ORDERS(?)}", SQL_NTS);
Para determinar se uma fonte de dados suporta procedimentos, uma aplicação chama SQLGetInfo com a opção SQL_PROCEDURES.
Para mais informações sobre procedimentos, consulte Procedimentos.