2010-02-01 1 views
1

사용자를 인증하는 cffunction (cfc 문서에 있음)이 있습니다. 저장 프로 시저를 참조하며 "out"유형의 cfprocparam을가집니다. Adobe CFML 참조에서 "매개 변수는 데이터베이스 시스템에서만 데이터를받는 데 사용되며 바인딩 된 변수로 매개 변수를 전달합니다."라는 의미입니다.바운드 변수 란 무엇입니까?

바운드 변수 란 무엇입니까? 위키

답변

3

"바운드 변수"라는 용어는 Adobe의 단어 중 잘못된 선택 일 수 있습니다. 나는 그들이 저장 프로 시저 안의 변수에 바인드된다는 것을 의미한다고 생각한다. "explain plan을 저장하라"라는 의미의 바인드 변수가 아니다. (변수와 변수 모두에 적용되어야한다.) "in"이상으로 "out"을 선택해야 할 몇 가지 좋은 이유가 있으며, 유용 할 수도있는 부작용이나 예상치 못한 부작용이 있습니다.

먼저 저장 프로 시저의 매개 변수가 "in"유형이면 대부분의 데이터베이스는 변수를 변경하면 안된다는 사실을 알 때 매우 유용합니다. 여기에 오라클의 예입니다 ...

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이 변경 될 수 있으며, 변경 될 수 없습니다.

둘째, ColdFusion에서 cfprocparam "variable ="구문을 사용하여이 단계를 더 멀리 수행하고 cfprocresult를 거치지 않고 ColdFusion에서 변경된 값을 실제로 가져올 수 있습니다. nTypeIn 10 될 것입니다이 테스트의 끝에서 ... 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#"> 

에 주목하지만, nTypeOut은 매우 유용 할 수 있습니다 (100)하지 (10)이 될 것입니다 만큼 당신이 데이터베이스 proc을 변경 기대하고있다.

희망에 대해 조금 더 밝혀주는 희망.

+0

@kevink - 예, 혼란스러운 단어 선택에 +1. 당신이 말했듯이, 몇몇 세부 사항은 데이터베이스 유형에 따라 달라질 것입니다. 그러나 문서에서보다 훨씬 더 나은 설명. – Leigh

0

:

(연산) 할당 된 저장 위치를 ​​갖는 값 때문에 변수와 관련되는 변수. 프로그래밍 언어가 표준 알 수없는 값, 무한대 등의 표현을 구현하는 경우 변수에 바인딩 된 값은이 중 하나 일 수 있습니다.

통지 위치에 결합되지 않은 굵은 부분

변수 자유 변수로 알려져있다.

+0

즉, 데이터베이스에 저장된 값을 가진 변수는 무엇입니까? – dmr

+0

어떤 종류의 값을 가지도록 할당되고 바인드 된 데이터베이스에 저장할 필요가 없으며 데이터베이스에 저장할 수 있습니다. – JonH

+0

위 컨텍스트에서는 데이터베이스에서 바인드 변수를 사용하는 방법에 대해 설명합니다. 이 도구를 사용하면 동적으로 빌드 계획을 캐시하고 이론적으로 성능을 향상시킬 수 있습니다. – ale