Wie gesagt, das bezieht sich jetzt auf Postgres mit PgDAC.
k.A. ob es solche Probleme auch bei anderen
DBMS und Zugriffskomponenten gibt.#
War als Beispiel erwähnt, dass Fehlermeldungen nicht immer "ganz" richtig sein müssen.
Also, irgendwo inderhalb einiger
Query-Komponenten (z.B. TPgQuery) wird scheinbar bei fehlendem Result die Abfrage nochmal ausgelöst, beim Open/OpenTable. (nicht beim Execute/ExecSQL)
Ganz tief in den Klassen.
Der PgSQLMonitor bekommt die wiederholte Anfrage nicht mit, drum hatte es auch etwas länger gedauert das Problem zu identifizieren, vorallem da es im Programm nicht immer knallt. (das untere Beispiel ist bei uns aber reproduzierbar)
Zum Test: Das Erstellungsscript und 3 Test-Scripte/Queries
SQL-Code:
CREATE OR REPLACE FUNCTION SetSetting(Name
VARCHAR, Value
INTEGER) RETURNS VOID
AS $$
BEGIN
-- hier INSERT or UPDATE
RETURN;
END$$ LANGUAGE plpgsql;
SELECT SetSetting('
Test', 0);
-- hier fällt es "nicht" auf, wenn es doppelt gesetzt wird
SELECT SetSetting('
Test', GetSetting('
Test') + 1);
-- hier dagegen ist es +2
--SELECT GetSetting('Test'); -- beide SQL gemeinsam ausgeführt zählen direkt in Zweierschritten hoch und zeigen es sofort an
SELECT GetSetting('
Test');
Das tritt auch manchmal auf, wenn ein SELECT ein Result liefert, aber in einem der Felder der "Fehler" liegt.
SELECT 'abc', SetSetting('Test', +1); -- machmal, aber nicht immer doppelt ... Muster noch nicht gefunden