![]() |
Datenbank: Interbase • Version: 6.1 • Zugriff über: egal
SQL Cursor schließen
Hallo :wink: ,
ich verwende in einer SP im Interbase einen Cursor. Von MSSQL-Server war ich es gewohnt, nach der Benutzung den Cursor wieder zu schließen und freizugeben. Gibt es solche Befehle auch unter Interbase oder ist dieser Schritt hier nicht notwendig, da möglicherweise alle Cursor intern nur Fast-Forward deklariert und nach verlassen der Schleife freigegeben werden? René |
Re: SQL Cursor schließen
Hallo René,
mach immer zu mit CLOSE. Grüße vom marabu |
Re: SQL Cursor schließen
Wie, CLOSE?
Einfach nur Close, und damit weiß Interbase, dass der Cursor zu schließen ist? Hab leider meine SP schon entlastet und die Cursor-Funktionen in eine Delphi-Schleife umgesetzt, da ich sehr eigenartige Ergebnisse und letztlich auch Fehlermeldungen erhielt. Aber fürs nächste Mal, danke |
Re: SQL Cursor schließen
Nicht einfach nur CLOSE - den Cursor musst du natürlich benennen. Hast du keinen Zugriff auf die Kurzreferenz SQLREF.HLP?
SQL-Code:
marabu
DECLARE c CURSOR FOR SELECT * FROM tbl;
/* some code here */ CLOSE c; |
Re: SQL Cursor schließen
Sorry, es funzt so nicht.
Ich deklariere meinen Cursor so:
SQL-Code:
CREATE PROCEDURE CURSOR_TEST
RETURNS (SUMME INTEGER) AS DECLARE VARIABLE ZAHL INTEGER; begin SUMME=0; for select t.zahl from table t into :ZAHL as CURSOR ZAHLCURSOR do begin SUMME=:SUMME+:ZAHL; end suspend; end; Zitat:
funktioniert alles nicht. Also mach ich den Beitrag wieder zu einer offenen Frage und verweise auf Punkt 1. Gibt es in Interbase 6.1 sowas wie Cursor schließen und freigeben oder nicht? Danke René |
Re: SQL Cursor schließen
Hab leider immer noch nix dazu gefunden :gruebel:
|
Re: SQL Cursor schließen
Hallo René,
Zitat:
Grüße vom marabu |
Re: SQL Cursor schließen
Hallo marabu,
ich beziehe mich auf das Buch "Interbase Datenbankentwicklung mit Delphi" von Andreas Kosch. Ich weiß nicht, ob ichs darf, aber ich zeige mal das (leider einzige) Beispiel zu Current Of und Cursor.
SQL-Code:
Das ist das Beispiel von Andreas Kosch. Mein Beispiel war natürlich nicht sehr sinnvoll, dafür benötige ich keinen Cursor. Ich habs nur schnell zusammengezimmert, weil ich alle Prozeduren schon auf Nicht-Cursor-Technik umgestellt hatte. Trotzdem interessiert es mich noch brennend für zukünftige Einsätze, wie ich im Interbase 6.1 besser einen Cursor definieren, verwenden und freigeben könnte.
CREATE PROCEDURE CursorBsp AS
DECLARE VARIABLE temp; BEGIN FOR SELECT p.CARGO FROM Table1 t, Table2 p WHERE p.MasterNumber = t.MasterNumber AND p.HouseNumber = t.HouseNumber AND p.ArrivalDate = t.ArrivalDate INTO :temp AS CURSOR TmpCursor DO UPDATE Table1 SET Origin = :temp WHERE CURRENT OF TmpCursor; END Ist vielleicht jemand kreativer als ich und kann ein gutes Beispiel demonstrieren? Danke René |
Re: SQL Cursor schließen
Hallo René,
das von dir zitierte Buch scheint mir ein leicht modifizierter reprint aus dem Jahr 1999 zu sein. Die vorgestellte Syntax funktioniert, wird aber in der Interbase 6 Language Reference nicht mehr aufgeführt - oder ich habe nicht genau genug gelesen. Ich gehe davon aus, dass ein auf diese Weise deklarierter Cursor nach Verlassen des FOR Statements nicht mehr existiert und du dich nicht um seine Freigabe kümmern musst. Welche anderen Möglichkeiten du beim Arbeiten mit einem Cursor hast, dazu würde ich vor allem die offizielle Dokumentation konsultieren: ![]() Grüße vom marabu |
Re: SQL Cursor schließen
Vielen Dank marabu,
aber wie schon gesagt, am besten wäre mal ein kleines Beispiel für eine Prozedur mit Cursor-Funktion. :roll: Ja, ja, ich will nicht nerven, ich habe unter dem Link nachgesehen, aber es trotzdem noch nicht auf die dort beschriebene Weise hinbekommen. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:56 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