![]() |
Datenbank: Firebird • Version: 2.15 • Zugriff über: IBO
block size exceeds implementation restriction
Hi,
ich habe für diesen Fehler die Information, dass entweder der PLAN oder das Statement zu groß ist. Ich habe aber folgendes gemacht: Ich habe eine dynamisches Statement, welches ich im Code zusammenbaue. Das wird u.U. recht lang:
Code:
Die Liste mit Aufruf der Procedure fbw kann recht lang werden, da es eine von Kunden definierbare Struktur ist.
select
f.id , f.nummer as FB_NUMMER , f.datum as FB_DATUM ... , (select cast(wert as date) from fbw(f.id, 2)) as DATUM , (select cast(wert as time) from fbw(f.id, 3)) as UHRZEIT , (select wert from fbw(f.id, 4)) as VERTRIEB , (select wert from fbw(f.id, 11)) as AP_NAME , (select wert from fbw(f.id, 12)) as AP_POSITION ... Die Werte werden in einem VARCHAR(255) gespeichert. Da jetzt auch längere Texte erfasst werden sollen, habe ich das Feld auf 10.000 erweitert. Der Rückgabewert der procedure fbw ist also jetzt VARCHAR(10000). Doch jetzt erhalte ich diesen Fehler (siehe Titel). Dabei sind noch nicht mal Daten mit mehr als 255 Zeichen enthalten. Auch ist weder Statement noch PLAN jetzt länger. Könnte das noch ein BUG in Firebird sein oder gibt es noch eine Beschränkung für das Result? Frank |
AW: block size exceeds implementation restriction
Du willst also eine beliebige Kennzahlen dynamisch aus dem System holen?
Ich würde das so machen:
Code:
Ich finde es irgendwie 'falsch', dynamisch erzeugte Daten anhand des Feldnames (der eigentlich statisch ist) identifizieren zu wollen.
select 'DATUM' as Field , (select cast(wert as date) from fbw(f.id, 2)) as Value
union select 'UHRZEIT', cast(wert as time) from fbw(f.id, 3)) union select 'VERTRIEB', select wert from fbw(f.id, 4)) union select 'AP_NAME', wert from fbw(f.id, 11)) union select wert from fbw(f.id, 12)) ... Einzige Änderung bei meiner Alternative: Du benötigst zwei Queries. Die erste für deine Stammdaten, also
Code:
und dann die zweite dynamische Query.
select
f.id , f.nummer as FB_NUMMER , f.datum as FB_DATUM Ich kann mir vorstellen, das bei meinem Ansatz keine internen Puffer oder Pläne überlaufen. |
AW: block size exceeds implementation restriction
Stehen in dem SQL-Statement IN Abfragen? FB expandiert diese nämlich in OR. Dadurch kann es zu einer Überschreitung der 64 KB-Grenze kommen.
|
AW: block size exceeds implementation restriction
Zitat:
Es lief ja auch schon einige Jahre ohne eine Exception. Alleiniger Unterschied ist die Änderung der Länge des Rückgabewertes der Procedure. @@ Furtbichler UNION erfordert IMHO gleiche Feldtypen. Dann müsste ich das Casten weglassen. Ich brauche es auch in einer Zeile. Hintergrund: Es sind Fragebögen mit Hauptdaten und dann halt die Fragen und Antworten in separater Tabelle. Erfassung und Druck machen keine Probleme. Aber der Kunde wünscht sich eine Grid mit 1 Zeile pro Fragebogen. Das macht in diesem Fall auch Sinn, da er über Filter aussagekräftige Auswertungen bekommt. Frank |
AW: block size exceeds implementation restriction
Ok. Und wenn Du die Daten im 2.Schritt in eine Pivot überführst? Ich arbeite mit MSSQL und da ist auch nicht alles Gold. Manchmal muss man die Dinge so lösen...
|
AW: block size exceeds implementation restriction
Heiko,
die wirst vermutlich einfach die max. Datensatzgröße von ca. 64K der verwendeten Datentypen erreichen. |
AW: block size exceeds implementation restriction
Hast du vllt. mal an einen Text-Blob gedacht statt eine VARCHAR(1000000000000) ?
|
AW: block size exceeds implementation restriction
Zitat:
@@Furtbichler Das ist sicher eine gute Lösung und wird sicher auch später mal so gemacht. @@Neutral General Mit BLOB' s kommt tatsächlich kein Fehler. Das wäre evtl. eine schnelle und machbare Lösung. Vielen Dank an Alle! Frank |
AW: block size exceeds implementation restriction
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:16 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz