2015-06-24 12 views
7

Dzisiaj naprawiając błędy w istniejącym kodzie znalazłem dziwny błąd.Czy istnieją jakiekolwiek ograniczenia dotyczące zapytań liczbowych/stwierdzeń, które możemy napisać w ramach cftransaction?

cel Oddział przesunięcie zbyt duży na krótki

Po poszukiwaniach znalazłem, że jest to coś zrobić z Java kodu bajtowego nawrócenia. Oto linki znalazłem:

w moim przypadku cftransaction zawiera około 870 wypowiedzi i to działa dobrze. Ale muszę dodać 2 kolejne zapytania do tej transakcji. Teraz otrzymuję ten błąd, gdy dodaję nawet jedną linię kodu wewnątrz cftransaction. Obecnie nie mogę przenieść żadnego z istniejących cfquery z cftransaction.

Oto ogólna struktura kodu:

<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> 

Czy istnieje obejście rozwiązać ten problem?

+0

Zawsze możesz przenieść wszystkie że SQL procedur przechowywanych w bazie danych. –

+1

Czy jesteś pewien, że transakcja jest przyczyną? Jedna z wymienionych wątków dotyczyła * nie *, a rozdzielenie rzeczy na mniejsze funkcje/komponenty rozwiązało problem. Niektóre rzeczy do przetestowania A) Czy to działa, jeśli tymczasowo usunąć transakcję? b) Czy to działa, jeśli przestawiłeś kod na mniejsze funkcje (lub cfc, jeśli w dalszym ciągu), a następnie wywołujesz je w ramach transakcji? c) Powiedziawszy to wszystko, brzmi jak dużo SQL dla zapytania. (To powiedziawszy, kompleksowa logika IMO jest lepiej spakowana w procedurze przechowywanej niż w zapytaniu). – Leigh

+0

@ Ligh: A) Tak, to działa poprawnie, gdy usunąłem transakcję. B) Tak, próbowałem jej działania. C) Planuję również spakować go w ramach procedury przechowywanej, ale chodzi o to, że wymaga to dużo czasu/wysiłku/testów i nie jestem pewien, czy klient będzie gotowy na to, czy nie, dlatego szukam małych obejść. –

Odpowiedz

2

Odsunięcie gałęzi ma związek z rozmiarem modułu/funkcji. Przyczyną może być również duży blok kodu warunkowego o numerze cfif/cfelse lub cfswitch.

Technicznie nie jestem pewien, czy istnieje ograniczenie na nie. zapytań, które możesz umieścić w bloku cftransaciton. Nie ma to nic wspólnego z migracją kodu z CF8 do CF9, ale z długością kodu wewnątrz bloków warunkowych.

chciałbym rozdzielić funkcję i starają się umieścić każdy z wielkich rozmiarów bloków warunkowych jako oddzielna funkcja wewnątrz 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> 
Powiązane problemy