Что такое связанная переменная? - PullRequest
1 голос
/ 01 февраля 2010

Существует функция (в документе cfc), которая аутентифицирует пользователя. Он ссылается на хранимую процедуру и имеет cfprocparam, который имеет тип "out". В справочнике Adobe CFML говорится, что это означает, что «параметр используется для получения данных только из системы базы данных. Передает параметр как связанную переменную».

Что такое связанная переменная?

Ответы [ 2 ]

3 голосов
/ 02 февраля 2010

Термин «связанная переменная» может быть неправильным выбором слов от 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. Это может быть очень полезно, если вы ожидаете, что хранимая процедура базы данных изменит его.

Надежда, которая проливает немного света на этот вопрос.

0 голосов
/ 01 февраля 2010

Из википедии:

(вычисления) Переменная, которая связана со значением, и, следовательно, переменная, которая имеет выделенное место хранения. Если язык программирования реализует представление канонического неизвестного значения, бесконечности и т. Д., значение, связанное с переменной, может быть одним из них.

Обратите внимание на жирную часть

Переменные, которые не привязаны к местоположению, называются свободными переменными.

...