Термин «связанная переменная» может быть неправильным выбором слов от Adobe. Я думаю, они имеют в виду, что он связан с переменной внутри хранимого процесса, а не с переменной связывания в смысле «сохранить план объяснения» (это должно быть справедливо как для переменных, так и для переменных). Есть несколько веских причин для выбора «вне» над «в», а также есть побочные эффекты, которые могут оказаться полезными или могут обжечь вас, если вы их не ожидаете.
Во-первых, если параметр в хранимой процедуре имеет тип "in", то большинство баз данных не позволяют вам назначать его в процедуре - очень полезно, когда вы знаете, что переменная не должна изменяться. Вот пример Oracle ...
CREATE PROCEDURE bind_test(p_testin IN NUMBER, p_testout OUT NUMBER) IS
BEGIN
-- p_testin := 100; -- error can not be used as an assignment target
p_testout := 100;
END bind_test;
p_testin нельзя изменить, он используется только в таких местах, как предложения "where" или для инициации других переменных, но p_testout можно изменить.
Во-вторых, вы можете продвинуться на один шаг дальше, используя синтаксис cfprocparam "variable =" в Cold Fusion, и фактически вернуть измененное значение в ColdFusion, не проходя через cfprocresult. Обратите внимание, что в этом примере начальные значения для nTypeIn и nTypeOut начинаются с 10 ...
<cfset nTypeIn = 10 >
<cfset nTypeOut = 10 >
<cfstoredproc procedure = "bind_test" dataSource = "#ProdDB#" returnCode = "No">
<cfprocparam type="in" cfsqltype="CF_SQL_INTEGER" variable="nTypeIn" value="#nTypeIn#" null="No">
<cfprocparam type="out" cfsqltype="CF_SQL_INTEGER" variable="nTypeOut" value="#nTypeOut#" null="No">
</cfstoredproc>
<cfdump var="#nTypeIn#">
<cfdump var="#nTypeOut#">
В Oracle в конце этого теста nTypeIn будет равно 10, но nTypeOut будет равно 100, а не 10. Это может быть очень полезно, если вы ожидаете, что хранимая процедура базы данных изменит его.
Надежда, которая проливает немного света на этот вопрос.