Oracle 9/SQL Filter auf leeres Feld

Hallo,

wie kann ich in einer SQL-Abfrage auf eine Oracle-Datenbank einen Filter auf ein leeres Feld setzen? D.h. ich will in einer Datenbank ein Feld mit einem bestimmten Wert füllen, wenn in diesem Feld bisher nix drinsteht (es ist aber nicht NULL drin, sondern gar nichts).

update TABLE set FELD1=250 where FELD1=[…] and FELD2=‚XYZ‘

Was muss man für das […] einsetzen? Habe schon ‚‘, ’ ’ und diverse andere Varianten versucht …

Gruß & danke,

Myriam

…Hmm …gar nichts im Feld wäre ja eben NULL. Mach doch mal einen SELECT * from TABLE WHERE FELD1 IS NULL. Kommen diejenigen Datensätze welche du updaten willst ?

Gruss

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

Mach doch mal
einen SELECT * from TABLE WHERE FELD1 IS NULL. Kommen
diejenigen Datensätze welche du updaten willst ?

Leider nicht, es gibt aber definitiv Datensätze wo FELD1 leer ist.

Gruß,

Myriam

Mahlzeit,

wie kann ich in einer SQL-Abfrage auf eine Oracle-Datenbank
einen Filter auf ein leeres Feld setzen?

wenn ein Feld leer ist, ist das Feld normalerweise NULL.

D.h. ich will in
einer Datenbank ein Feld mit einem bestimmten Wert füllen,
wenn in diesem Feld bisher nix drinsteht (es ist aber nicht
NULL drin, sondern gar nichts).

Dann ist es nicht leer. Versuch doch mal herauszufinden, was drinsteht, indem Du diese „leeren“ Felder zu einer Dir bekannten Konstante konkatenierst, etwa:

update TABLE 
 set FELD1='250' 
 where 'nix' || FELD1 || 'nix' = 'nixnix' 
 and FELD2='XYZ';

(Übrigens stimmt da was nicht - entweder ist FELD1 eine Zeichenkette, dann mußt Du es mit ‚250‘ updaten, oder Deine Vergleichsoperation paßt nicht zum Datentyp).

HTH

Sancho

Hallo Sancho,

Dann ist es nicht leer.

Ist das möglicherweise ein Displayproblem in TOAD? Das verwende ich nämlich für mein Herumgestümper.

FELD1 ist tatsächlich bei einigen Datensätzen leer, was für den Import in meine Anwendung ein Problem darstellt. ich will es proforma mit irgendwas halbwegs Plausiblem füllen, damit der Import klappt.

Versuch doch mal herauszufinden, was
drinsteht, indem Du diese „leeren“ Felder zu einer Dir
bekannten Konstante konkatenierst, etwa:

update TABLE
set FELD1=‚250‘
where ‚nix‘ || FELD1 || ‚nix‘ = ‚nixnix‘
and FELD2=‚XYZ‘;

Walter??? Ägypten??? Sorry, meine Oracle-Kenntnisse sind extrem gering. Was soll dieses Statement erreichen bzw. was soll ich für nix und nixnix einsetzen?

(Übrigens stimmt da was nicht - entweder ist FELD1 eine
Zeichenkette, dann mußt Du es mit ‚250‘ updaten, oder Deine
Vergleichsoperation paßt nicht zum Datentyp).

Tippfehler, daran wird es nicht scheitern.

Gruß & danke,

Myriam

Hi!

Ist das möglicherweise ein Displayproblem in TOAD? Das
verwende ich nämlich für mein Herumgestümper.

Oh ja, TOAD macht mitunter Probleme mit solchen Sachen.

FELD1 ist tatsächlich bei einigen Datensätzen leer, was für
den Import in meine Anwendung ein Problem darstellt. ich will
es proforma mit irgendwas halbwegs Plausiblem füllen, damit
der Import klappt.

OK.

Walter??? Ägypten??? Sorry, meine Oracle-Kenntnisse sind
extrem gering. Was soll dieses Statement erreichen bzw. was
soll ich für nix und nixnix einsetzen?

Walter oder Ägypten paßt schon :smile:

Du willst die leeren Datensätze erfassen, wobei die Vergleichsoperationen aus irgendeinem Grund fehlschlagen. Durch die Konkatenation erwischt Du sie über die Hintertür: der Ausdruck

'nix' || FELD1 || 'nix' 

erzeugt aus einem Datensatz einen Datensatz plus angehängtem ‚nix‘ vorne und hintendran. Wenn dieser Datensatz leer war, wird daraus exakt ‚nixnix‘, und der Vergleich zieht.

Du kannst dafür jede beliebige Zeichenfolge nehmen, nix war halt so anschaulich :smile:

Tippfehler, daran wird es nicht scheitern.

OK, wenn er nur hier auftrat :smile:

Viele Grüße

Sancho

Hallo,

versuch es doch mal mit

where nvl ( feld1, ‚‘) = ‚‘…

nicht schön und auch nicht schnell…
aber vielleicht funktioniert es ja…

Gruß
MÖBI

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

Hi!

Oh ja, TOAD macht mitunter Probleme mit solchen Sachen.

Wirklich?? Derzeit mit Toad 8.6 unterwegs und noch keine Troubles in dieser hinsicht gehabt.

Beim TOAD gäbe es die Option, das man die NULL-Values schön farblich darstellen kann, damit man sieht, ob das Feld wirklich leer (also NULL) ist oder nur ein dubioser Wert wie ein Leerzeichen drinnensteht …

Ich glaube eher, daß es hier ein Verständnisproblem zwischen „leer“ und NULL (sprich: „nall“, und nicht die Ziffer „0“, also „null“) gibt (was genau dasselbe ist)

NULL bedeutet bei Oracle, das das Feld komplett leer ist, also überhaupt nix drinnensteht …

where feld is null

Grüße,
Tomh

Beim TOAD gäbe es die Option, das man die NULL-Values schön
farblich darstellen kann, damit man sieht, ob das Feld
wirklich leer (also NULL) ist oder nur ein dubioser Wert wie
ein Leerzeichen drinnensteht …

Klingt interessant, wie geht das denn?

Ich glaube eher, daß es hier ein Verständnisproblem zwischen
„leer“ und NULL (sprich: „nall“, und nicht die Ziffer „0“,
also „null“) gibt (was genau dasselbe ist)

NULL bedeutet bei Oracle, das das Feld komplett leer ist, also
überhaupt nix drinnensteht …

Nein, da gibt es bei mir kein Verständnisproblem. Das Feld hat in TOAD keinen sichtbaren Inhalt (mögliche unsichtbare Leerzeichen ausgenommen). Kann es auch nicht, da es vorher nicht gefüllt wurde (das ist das eigentliche Problem, an dem ich arbeite, hier suche ich nur einen Workaround).

where feld is null

AHA! Mein Fehler war dann wohl in der Syntax, ich habe „where feld = NULL“ probiert, dann kann es ja nicht klappen. Es wird Zeit für einen sql-Lehrgang …

Danke,

Myriam