Auf Fehler prüfen

ukulele

Datenbank-Guru
Beiträge
5.107
Es ist ja irgendwie immer das Selbe. Man schreibt ein kleines, 500 Zeilen SQL Script das irgendwo dynamisch Code generiert und ausführt und dann hakt es an einer klitzekleinen Stelle und man sucht sich nen Wolf.

Beispiel: Ich prüfe mehrere Spalten einer Tabelle und erstelle eine Statistik über die Werte. Das Script werde ich noch posten wenn es fertig ist. In jedem Fall muss ich mit EXEC() arbeiten und in 1% der Fälle habe ich irgendwo einen arithmetischen Überlauffehler. In diesem Fall habe ich es nach langer Suche gefunden:
Code:
SET        @value_avg = (        SELECT    avg(' + @column_name + ')
                            FROM    ' + @table_name + '
                            WHERE    ' + @column_name + ' IS NOT NULL )
Die Spalte ist ein INT, bilde ich die Summe über die Spalte (was auch bei avg() im ersten Schritt passiert) ist der INT zu klein. Konvertierung in BIGINT schafft Abhilfe. Was aber wenn die Spalte Nachkommastellen hat und Werte zwischen 0 und 1 beinhaltet? Dann killt mir mein BIGINT meinen Durchschnitt...

Jedenfalls bin ich häufig in der Situation einen Fehler erkennen zu müssen. Kennt irgendjemand einen Weg dies zu bewerkstelligen?
 
Werbung:
Es ist ja irgendwie immer das Selbe. Man schreibt ein kleines, 500 Zeilen SQL Script das irgendwo dynamisch Code generiert und ausführt und dann hakt es an einer klitzekleinen Stelle und man sucht sich nen Wolf.

...

Jedenfalls bin ich häufig in der Situation einen Fehler erkennen zu müssen. Kennt irgendjemand einen Weg dies zu bewerkstelligen?

Für sowas halt keinen generischen Code verwenden? Oder je nach Typ unterschiedliche Funktionen definieren? Das zumindest geht in PG.

Code:
create function foo(float) ...
create function foo(int) ...
...

Andreas
 
Werbung:
Natürlich kann ich für jeden Datentypen eigenen Code schreiben aber das macht die Sache unübersichtlicher bzw. aufwendiger. Außerdem fällt das Debuggen dadurch nicht leichter und genau da nervt es mich. SQL Studio spuckt dann nur 100x (1 Zeile(n) betroffen) aus und irgendwo dazwischen steht ein Fehler, ich kann aber nicht sehen bei welchem Datensatz oder welcher Variable das passiert ist und darf dann suchen / raten.

Am liebsten wäre mir eine Funktion die mir das Resultat eines Querys, also z.B. "(1 Zeile(n) betroffen)" zurück gibt.
 
Zurück
Oben