Параметры процедуры

Параметры в вызовах процедур могут быть входным, входным и выходным или выходными параметрами. Это отличается от параметров во всех остальных инструкциях SQL, которые всегда являются входными параметрами.

Входные параметры используются для отправки значений в процедуру. Например, предположим, что таблица "Части" содержит столбцы PartID, Description и Price. Процедура InsertPart может иметь входной параметр для каждого столбца в таблице. Например:

{call InsertPart(?, ?, ?)}  

Драйвер не должен изменять содержимое входного буфера, пока SQLExecDirect или SQLExecute не возвращает SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, SQL_INVALID_HANDLE или SQL_NO_DATA. Содержимое входного буфера не должно быть изменено, пока SQLExecDirect или SQLExecute возвращает SQL_NEED_DATA или SQL_STILL_EXECUTING.

Входные и выходные параметры используются как для отправки значений в процедуры, так и для получения значений из процедур. Использование одного и того же параметра, что и входной, и выходной параметр, как правило, является запутанным и следует избежать. Например, предположим, что процедура принимает идентификатор заказа и возвращает идентификатор клиента. Это можно определить с помощью одного входного и выходного параметра:

{call GetCustID(?)}  

Возможно, лучше использовать два параметра: входной параметр для идентификатора заказа и выходного или входного или выходного параметра для идентификатора клиента:

{call GetCustID(?, ?)}  

Выходные параметры используются для получения возвращаемого значения процедуры и получения значений из аргументов процедуры; процедуры, возвращающие значения, иногда называются функциями. Например, предположим, что процедура GetCustID только упоминание возвращает значение, указывающее, удалось ли найти порядок. В следующем вызове первый параметр является выходным параметром, используемым для получения возвращаемого значения процедуры, второй параметр является входным параметром, используемым для указания идентификатора заказа, а третий — выходной параметр, используемый для получения идентификатора клиента:

{? = call GetCustID(?, ?)}  

Драйверы обрабатывают значения входных и выходных параметров в процедурах, отличных от входных параметров в других инструкциях SQL. При выполнении инструкции они извлекают значения переменных, привязанных к этим параметрам, и отправляют их в источник данных.

После выполнения инструкции драйверы хранят возвращаемые значения входных и выходных параметров в переменных, привязанных к этим параметрам. Эти возвращаемые значения не гарантируются, пока все результаты, возвращенные процедурой, не будут возвращены, и SQLMoreResults вернул SQL_NO_DATA. Если выполнение инструкции приводит к ошибке, содержимое буфера входных и выходных параметров или буфера выходных параметров не определено.

Приложение вызывает SQLProcedure , чтобы определить, имеет ли процедура возвращаемое значение. Он вызывает SQLProcedureColumns , чтобы определить тип (возвращаемое значение, входные и выходные данные или выходные данные) каждого параметра процедуры.