Kurze5 Geschrieben 19. Oktober 2012 Teilen Geschrieben 19. Oktober 2012 Hallo zusammen, ich habe ein kleines Problem.. Ich möchte mir alle Kunden ausgeben lassen, die in einer bestimmten Liste sind. Die ListenID wird als Parameter übergeben. Wenn ich jetzt keine ListenID übergebe, sprich '' sollen alle Kunden aufgelistet werden. Könnt ihr mir weiterhelfen? SELECT Name, Vorname, Geburtsdatum, ListenID FROM Kunde WHERE ListenID = :Liste Danke und LG Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Leimy84 Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 SELECT Name, Vorname, Geburtsdatum, ListenID FROM Kunde WHERE ListenID = :Liste OR :Liste = '' Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 Die OR Bedingung ist nicht richtig. Je nach DB wird nach einem Leerstring gesucht oder nach NULL. Da NULL nie gleich einem bestimmten Wert ist, hilft das hier nicht weiter. Die einfachste Möglichkeit ist, die WHERE Bedingung wegzulassen. Sprich bei einem fehlenden Parameter ein zweites, passendes SQL aufzurufen. Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Leimy84 Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 Wenn ich jetzt keine ListenID übergebe, sprich '' sollen alle Kunden aufgelistet werden. Ich habe mich strikt daran gehalten, was Kurze5 über eine leere ListenID gesagt hat. Ich kenne die Struktur der Datenbank - insbesondere den Datentyp von ListenID (Zeichenkette oder numerisch) - nicht, daher hab ich das nur so umgesetzt wie beschrieben. Ich habe da rausgelesen, dass :Liste im beschriebenen Fall mit '' belegt wird und dann alle Zeilen angezeigt werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Enno Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 Ich denke du hast das falsch verstanden. Wenn listend ='' dann soll quasi keine Wehre Klausel greifen sondern einfach alle Datensätze ausgegeben werden. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Leimy84 Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 Der Ausdruck :Liste = '' wird bei Übergabe von '' an Liste zu '' = '' , was immer trueergibt. Wird das mit der anderen Bedingung OR-verknüpft ergibt es auch immer true und damit wird die ganze Liste ausgegeben. Falls ich das jetzt immer noch falsch verstanden haben soll, ziehe ich mich aus der Diskussion zurück. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
dr.dimitri Geschrieben 20. Oktober 2012 Teilen Geschrieben 20. Oktober 2012 Der Ausdruck :Liste = '' wird bei Übergabe von '' an Liste zu '' = '' , was immer trueergibt. Wird das mit der anderen Bedingung OR-verknüpft ergibt es auch immer true und damit wird die ganze Liste ausgegeben. Grundsätzlich ist der Ansatz richtig, wenn die DB '' wirklich als Leerstring - also einen String mit der Länge 0 Byte ansieht. Für Oracle z.B. ist ein '' aber NULL. Damit würde im SQL stehen NULL = NULL Da NULL immer ein undefinierter Wert ist, ist der Vergleich immer false - es wird also kein einziger Wert zurückgeliefert :cool: Kleines Beispiel: SQL> select count(*) from all_objects where ''=''; COUNT(*) ---------- 0 SQL> select count(*) from all_objects where 1=1; COUNT(*) ---------- 55677 SQL> select count(*) from all_objects where NULL IS NULL; COUNT(*) ---------- 55677 SQL> Dim Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kurze5 Geschrieben 25. Oktober 2012 Autor Teilen Geschrieben 25. Oktober 2012 Ja, genau ich meinte, wenn ich keine ListenID eingebe, also ein leerer Parameter übergeben wird, soll die WHERE-Klausel nicht greifen. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Kurze5 Geschrieben 25. Oktober 2012 Autor Teilen Geschrieben 25. Oktober 2012 aber das von Leimy84 hat funktioniert Danke Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.