Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Firebird - context limit (https://www.delphipraxis.net/214146-firebird-context-limit.html)

lxo 24. Nov 2023 07:11

Datenbank: Firebird • Version: 4 • Zugriff über: UniDAC

Firebird - context limit
 
Hallo zusammen,

weiß jemand wieso das context limit bei stored procedures innerhalb eines execute blocks nicht greift?
Ist das irgendwo dokumentiert oder gibt es da doch ein Limit?

Beispiel
Wenn ich innerhalb eines execute blocks mehr als 256 inserts mache kommt die Meldung "Too many Contexts of Relation/Procedure/Views. Maximum allowed is 256.".
Würde ich nun den insert in eine stored procedure packen könnte ich die stored procedure 1000fach in ein execute block packen und ausführen.

lxo 24. Nov 2023 08:17

AW: Firebird - context limit
 
Da ist die Antwort
https://github.com/FirebirdSQL/firebird/issues/1195

IBExpert 24. Nov 2023 08:19

AW: Firebird - context limit
 
Liste der Anhänge anzeigen (Anzahl: 1)
das limit gibt es in blocks und in procedures, beide könnten das limit aber über execute statement beliebig umgehend, jedes statement selbst ist dann aber wieder mit dem gleichen limit umzusetzen. im anhang als beispiel eine sp mit 1000 update or insert statements (von denen ohne execute statement nur ca 80 gehen würden, weil jeder 3 contexte verbraucht

falls die antwort nicht zu deinem problem passt, bau doch mal minimal beispiel was geht und was nicht mehr geht

IBExpert 24. Nov 2023 08:21

AW: Firebird - context limit
 
Zitat:

Zitat von lxo (Beitrag 1530029)

nö, das ist der stand von 2006, da gab es noch gar kein execute block

lxo 24. Nov 2023 08:28

AW: Firebird - context limit
 
Zitat:

Zitat von IBExpert (Beitrag 1530031)
Zitat:

Zitat von lxo (Beitrag 1530029)

nö, das ist der stand von 2006, da gab es noch gar kein execute block

Siehe Kommentare, ganz unten.

Zitat:

The limit applies to the BLR (byte code) where every table reference is encoded with a single-byte number. Thus the limit is static and does not affect how many times the procedure is executed.


BLR is per-procedure, so one procedure call cannot have more than 255 table references, but many different calls do not share this limit.
EXECUTE PROCEDURE does not create a context, so EXECUTE BLOCK may have lots of them. However, SELECT FROM PROCEDURE creates a context, so your EXECUTE BLOCK cannot have more than 255 SELECTs from procedures.

IBExpert 24. Nov 2023 08:33

AW: Firebird - context limit
 
wo du recht hast ....

hatte nicht erwartet das ein thread 17 Jahre lebt ....

IBExpert 24. Nov 2023 08:38

AW: Firebird - context limit
 
ist aber ja ähnlich mit aufrufen von execute procedure oder execute statement, beide nutzen keinen eigenen context von den 255 verfügbaren
jeder select/insert/update/update or insert aber schon und zwar 1/1/2/3

lxo 24. Nov 2023 09:22

AW: Firebird - context limit
 
Zitat:

Zitat von IBExpert (Beitrag 1530034)
ist aber ja ähnlich mit aufrufen von execute procedure oder execute statement, beide nutzen keinen eigenen context von den 255 verfügbaren
jeder select/insert/update/update or insert aber schon und zwar 1/1/2/3

Das wollte ich wissen.
Dann brauch ich mir bei einem Execute Block mit x Execute Procedures ja keine Sorgen machen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 07:18 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-2025 by Thomas Breitkreuz