2011-01-13 5 views
0

저장 프로 시저를 실행하고 결과를 반환하는 검색 기능이 있습니다. 결과가 없으면 좀 더 일반화 된 검색을 사용하여 한 번 더이 기능을 실행 해보고 싶습니다. 어떤 결과가 없다면, 기본적으로재귀 메서드 호출에 문제가 있습니까?

<cfif results.recordCount EQ 0 And Not arguments.searchForPotentialMatches> 
    <cfset arguments.searchForPotentialMatches = True /> 
    <cfinvoke method="thisMethod" argumentCollection="#arguments#" /> 
</cfif> 

와 나는 이미 다시이 메소드를 호출한다, 일반화 된 검색을 시도하지 않은 - 그래서, 난 내 코드에 CFIF를 넣어. 그런 다음 메서드 시작 부분에서 저장 프로 시저를 호출하기 전에 searchForPotentialMatches가 true인지 확인한 후 검색 쿼리를 일반화합니다.

문제가있는 것 같습니다. 실행하려고하면 저장 프로 시저에 시간 초과가있을 때까지 중단됩니다. 디버깅 및 변수 출력을 통해 저장 프로 시저에 도달했는지 확인한 다음 실행을 계속하려고했습니다. 그러나 이러한 재실행 변경 전에 원래 함수를 사용하여 일반 검색을 수행 한 다음 일반화 된 검색을 2 개의 별도 호출로 수행하면 올바르게 실행됩니다. 그래서 프로그래밍 방식으로 이것을 빌드하려고 할 때 왜 실패하는지 확신 할 수 없다. 내가 뭘 잘못하고 있니?

+1

전체 기능 호출을 게시하십시오. 문제는 재귀 호출 자체에있을 수도 있고 그렇지 않을 수도 있습니다. –

답변

0

이것은 불공평하다고 느낍니다 ... 그러나 문제는 완전히 다른 무언가로 이루어졌습니다. 재귀 호출은 올바르게 작동하지만 저장 프로 시저를 호출하고 저장된 proc을 중단시키기 전에 함수 검사로 인해 변경된 다른 필드가있었습니다. 죄송합니다. 모든 도움에 감사드립니다.

2

정말 많은 수입니다. 이 코드는 모두 cfc 안에 있습니까? 그 cfc는 영구 범위에 있고 당신은 모든 변수를 올바르게 var'd 했습니까?

문제없이 일반 및 일반 조건에서 독립 실행 형 저장 프로 시저를 실행할 수 있습니까?

데이터 흐름을 좀 더 추적 할 수 있도록 더 많은 코드 (예 : 저장된 proc 호출 포함)에 붙여 넣으십시오.

1

재귀는 다음과 같습니다 다루고 이론적으로 간단하고 엉덩이에 통증이 실제로

  • - 디버그.
  • 나무를 걸거나 그래프를 가로 지르는 데 종종 필요한 것이지만,하지 않고 할 수있는 경우에는하지 않아도됩니다.

그래서 쓴대로, 나는 재귀를 잃고 순차적으로 할 것입니다. @scrittler 요청으로 더 이상 코드를 결석, 나는 같은 다시 것 :

<cfcomponent output="false"> 
    <cffunction name="search" output="false" access="public" returntype="any" hint="I am called by the client"> 
     <!--- <cfargument/> tags ---> 
     <!--- what ever you need to do with the arg before actually searching ---> 
     <cfset var results = doSearch(argumentCollection=arguments)> 
     <cfif NOT results.recordcount> 
      <!--- whatever you need to change about the args to perform a generalized search ---> 
      <cfset var results = doSearch(argumentCollection=arguments)> 
     </cfif> 

     <cfreturn results> 
    </cffunction> 

    <cffunction name="doSearch" output="false" access="private" returntype="query" hint="I run the query"> 
     <!--- <cfargument/> tags ---> 
     <!--- results query (i.e. call to sproc)---> 
     <cfreturn results> 
    </cffunction> 
</cfcomponent> 
0

기능 태그에 액세스 속성은 무엇인가, 당신은 그 자체를 호출 할 수 없습니다 기능을 남긴다 값 준?

관련 문제