Veröffentlicht 19. Oktober 201212 j 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
20. Oktober 201212 j SELECT Name, Vorname, Geburtsdatum, ListenID FROM Kunde WHERE ListenID = :Liste OR :Liste = ''
20. Oktober 201212 j 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
20. Oktober 201212 j 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.
20. Oktober 201212 j Ich denke du hast das falsch verstanden. Wenn listend ='' dann soll quasi keine Wehre Klausel greifen sondern einfach alle Datensätze ausgegeben werden.
20. Oktober 201212 j 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.
20. Oktober 201212 j 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
25. Oktober 201212 j Ja, genau ich meinte, wenn ich keine ListenID eingebe, also ein leerer Parameter übergeben wird, soll die WHERE-Klausel nicht greifen.
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.