Вопрос

Существует cfffunction (в документе CFC), который аутентифицирует пользователя. Он ссылается на хранящуюся процедуру и имеет CFPROCPARAM, который имеет тип «OUT». На ссылке Adobe CFML он говорит, что означает, что «параметр используется для приема данных только из системы базы данных. Проходит параметр в виде связанной переменной».

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

Это было полезно?

Решение

Термин «связанная переменная» может быть плохой выбор слов из Adobe. Я думаю, что они имеют в виду, что он связан с переменной внутри сохраненного ProC, а не переменную связывания в смысле «Сохранить план объяснения» (что должно быть верно как в переменных, так и в разных переменных). Есть несколько веских причин выбирать «вне» в «в», и есть также побочные эффекты, которые вы можете найти полезным или могут сжечь вас, если вы не ожидаете их.

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

Во-вторых, вы можете взять этот один шаг дальше, используя синтаксис CFProcParam «Variable =» в холодном слиянии и фактически вернуть измененное значение в ColdFusion, не проходя через CFPROCRESULT. Уведомление В этом примере начальные значения для NTYPINE и 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. Это может быть очень полезно, если вы ожидаете, что база данных хранится, чтобы изменить его.

Надеюсь, что проливает немного больше света на вопрос.

Другие советы

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

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

Обратите внимание смелая часть

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top