2015-06-24 48 views
7

今天在修復某些現有代碼中的錯誤時,我發現了一個奇怪的錯誤。我們可以在cftransaction中編寫數字查詢/語句是否有任何限制?

轉移目標偏移短

過大搜索,我發現它是與Java字節碼轉換之後。下面是我找到的鏈接:

在我的情況cftransaction含有大約870語句和它的正常工作。但是我需要爲這個事務增加2個查詢。現在,當我在cftransaction中添加一行代碼時,出現此錯誤。目前我無法將任何現有的cfquery移出cftransaction。

這裏是代碼的整體結構:

<cftransaction action="begin"> 

    <cfif URL.action eq 'add'> 
     Around 200 lines of queries/statements 
    <cfelseif URL.action eq 'edit'> 
     Around 200 lines of queries/statements 
    </cfif> 

    <cfif URL.action eq 'add' or URL.action 'edit'> 
      Around 450 lines of queries/statements 
    </cfif> 

</cftransaction> 

有任何解決方法來解決這個問題?

+0

你總是可以移動所有的SQL數據庫存儲過程。 –

+1

您確定交易是原因嗎?其中一個提到的交易是*不涉及,將事情分解成更小的功能/組件解決了問題。有些事情要測試A)如果您臨時移除交易,它會起作用嗎? b)如果您將代碼重新安排到較小的函數(或cfc,如果需要),然後從事務中調用這些函數,它會起作用嗎? c)說了這麼多,對於查詢來說聽起來像很多SQL。 (也就是說,IMO複雜的SQL邏輯更好地打包在存儲過程而不是查詢中。) – Leigh

+0

@Leigh:A)是的,當我刪除事務時它工作正常.B)是的,我嘗試了它的工作。 C)我也打算將它打包到一個存儲過程中,但這需要大量的時間/精力/測試,我不確定客戶端是否準備好了,這就是爲什麼要尋找小的解決方法。 –

回答

2

分支偏移量與模塊/函數的大小有關。它也可能是由於cfif/cfelsecfswitch的大條件代碼塊造成的。

從技術上講,我不確定是否有任何上限。的查詢可以放在cftransaciton區塊內。它與從CF8到CF9的代碼遷移無關,但是代碼在條件塊內的長度。

我將要拆分的功能,並儘量把每一個大尺寸的條件塊作爲CFC中的一個單獨的功能:

<cffunction name="myFunc1"> 
    <cftransaction action="begin"> 
     <cfif URL.action eq 'add'> 
     <!--- function call with your xxx lines of queries/statements ---> 
     <cfinvoke component="MyCfc" method="firstQueryBlock" result="result1"> 
     <cfelseif URL.action eq 'edit'> 
     <!--- second function call with your yyy lines of queries/statements ---> 
     <cfinvoke component="MyCfc" method="secondQueryBlock" result="result2"> 
     </cfif> 

     <cfif URL.action eq 'add' or URL.action 'edit'> 
      <!--- third function call with your zzz lines of queries/statements ---> 
      <cfinvoke component="MyCfc" method="thirdQueryBlock" result="result3"> 
     </cfif> 
    </cftransaction> 
</cffunction> 
相關問題