Oracle-DB und Null-Werte

Hallo kollegen,

folgendes:
ich erstelle zur zeit reports mittels vb6 und einer oracle8 db.

nun frage ich einige adresswerte ab, wobei mir mein programm mit der fehlermeldung „UNGÜLTIGE VERWENDUNG VON NULL“ ab.
wenn ich nun im sql ein NVL vor die betreffende spalte setze, umgehe ich den fehler. blos sind anscheinend in jeder spalte meiner abfrage NULL-Werte vorhanden. es ist doch nicht richtig, wenn ich in mein sql-statement vor jede spalte ein NVL(spalte, 0) setze, oder?

danke für eure tipps und ratschläge
(db wurde erst kürzlich modifiziert… deshalb meine frage)
grüße

rasta

nun frage ich einige adresswerte ab, wobei mir mein programm
mit der fehlermeldung „UNGÜLTIGE VERWENDUNG VON NULL“ ab.

Wie schaut den das Statement aus?

Grüße, Robert

normal----> select column, column, column from table, table

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Dazu sind zwei Dinge zu sagen:

  1. ohne eine where - klausel ist das ergebnis des obigen selects ein kartesisches produkt (d.h. für jeden eintrag in der ersten tabelle bekommst du alle sätze aus der zweiten tabelle). dies ist in den seltensten fällen beabsichtigt. solltest du die where klausel also nicht aus schreibfaulheit :wink: weggelassen haben, ist es sehr zu empfehlen noch mal nachzuschauen, ob der select wirklich die gewünchten daten liefert.

  2. die null - values scheinen mir ein problem des anwendungsprogrammes zu sein, das auf die db zugreift. versuch einfach einmal das identische statement direkt an oracle abzuschicken (z.b. mittels SQL*Plus). wenn sich herausstellt, daß es wirklich das anwendungsprogramm ist, das mit den NULLs nichts anfangen kann, dann ist die verwendung von nvl() durchaus kein fehler. die laufzeit des statements kann sich dadurch zwar erhöhen, aber in der regel reden wir hier dann von millisekunden…

lg,
martin

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]


martin du bist ein schlaumeier!

du bekommst nämlich kein kartesisches produkt wenn du deine daten nur aus einer tabelle abfrägst!!!
sonst hätte ich auch table, table geschrieben!
außerdem war das auch gar nicht meine frage
bitte immer richtig lesen!

das problem liegt darin begründet das oracle den „NULL“ -wert anders interpretiert als microsoft

viele grüße

rasta

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

normal----> select column, column, column from table,
table

martin du bist ein schlaumeier!

du bekommst nämlich kein kartesisches produkt wenn du deine
daten nur aus einer tabelle abfrägst!!!
sonst hätte ich auch table, table geschrieben!
außerdem war das auch gar nicht meine frage
bitte immer richtig lesen!

ich will ja nicht pingelig sein, aber du HAST „table, table“ geschrieben… deshalb habe ich dort auch einen fehler vermutet, und warum nach eventuell nach hintergründigsten, gut versteckten fehlern suchen, wenn man schon einen vordergründigen gefunden hat. der muß zwar nicht unbedingt etwas mit dem problem zu tun haben, aber es könnt (mit einer zugegebenermaßen seeeehr geringen chance) schon die lösung des problems sein. ich wollte nur sichergehen, daß wir den fehler nicht am falschen ende suchen.

das problem liegt darin begründet das oracle den „NULL“ -wert
anders interpretiert als microsoft

das klingt jetzt wahrscheinlich ziemlich blöd, aber das problem scheint daran zu liegen, daß M$ den null-(nicht)-wert überhaupt interpretiert. daß es damit immer wieder einmal probleme gibt, weiß ich aus eigener leidvoller erfahrung. schließlich ist es auch nicht immer ganz einfach mit hilfe deterministischer werte das nichtvorhandensein ebensolcher darzustellen :frowning:

um nochmal zu deinem problem zu kommen: wenn es sich durch die verwendung von „nvl“ umgehen läßt, dann spricht eigentlich auch gar nix dagegen. eine andere möglichkeit wäre nulls überhaupt nicht zu erlauben und dir selbst einen „undefinierten“ wert zu definieren (vorsicht übrigens: 0 ist so ziemlich der dümmste wert, den man für ein „numerisch undefiniert“ wählen kann).

viele grüße

rasta

grüße aus wien,
martin

sorry martin,

du hast recht gehabt :smile:

danke für deine hilfe

grettings aus münchen

rasta