Heute habe ich beim Beheben von Fehlern in einem vorhandenen Code einen seltsamen Fehler gefunden.Gibt es irgendeine Beschränkung mit Anzahl Abfragen/Anweisungen, die wir in cftransaction schreiben können?
Ast Ziel zu groß Offset für kurze
Nach der Suche fand ich, dass es etwas ist, mit Java-Byte-Code-Konvertierung zu tun. Hier sind die Links, die ich gefunden:
- Branch target offset too large for short
- Branch Target Offset Error
- Why does a long cfc file work in CF8, but not CF9? Getting "Branch target offset too large for short" error
In meinem Fall cftransaction enthält rund 870 Aussagen und es funktioniert gut. Aber ich muss dieser Transaktion zwei weitere Abfragen hinzufügen. Jetzt bekomme ich diesen Fehler, wenn ich gerade eine Zeile Code in cftransaction hinzufüge. Derzeit kann ich keine der bestehenden cfquery aus der ctransaction entfernen.
Hier ist die Gesamtstruktur des Code:
<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>
Gibt es eine Abhilfe Um dieses Problem zu beheben?
Sie immer, dass SQL alle Datenbank gespeicherte Prozeduren bewegen kann. –
Sind Sie sicher, dass die Transaktion die Ursache ist? Eine der genannten Threads war * nicht * involviert und die Aufteilung in kleinere Funktionen/Komponenten löste das Problem. Einige Dinge zum Testen A) Funktioniert es, wenn Sie die Transaktion vorübergehend entfernen? b) Funktioniert es, wenn Sie den Code in kleinere Funktionen umwandeln (oder, wenn nötig, cfc), diese dann innerhalb einer Transaktion aufrufen? c) Nachdem das alles gesagt wurde, klingt es für eine Abfrage wie viel SQL. (Das heißt, IMO komplexe SQL-Logik ist besser verpackt in einer gespeicherten Prozedur als eine Abfrage.) – Leigh
@Leigh: A) Ja, es funktioniert gut, wenn ich die Transaktion entfernt.B. Ja habe ich versucht, seine Arbeit. C) Ich plane auch, es in eine gespeicherte Prozedur zu packen, aber die Sache erfordert viel Zeit/Aufwand/Tests und ich bin mir nicht sicher, ob der Client dafür bereit sein wird oder nicht, deshalb suchen Sie nach kleinen Problemumgehungen. –