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
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 weggelassen haben, ist es sehr zu empfehlen noch mal nachzuschauen, ob der select wirklich die gewünchten daten liefert.
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]
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
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).