Qracle-SQL stringsuche ohne spaltennamen zu kenne!

Hi!

ich brauche eine SQL-Anweisung die in Oracle eine Abfrage über eine VIEW zurückliefert wobei die ich allerdings die Spaltennamen der VIEW für die where-Klausel net kenne!!

z. B.
select distinct
PKEY
from
meineView
where
searchString like (1. Spalte von meine meineView)
searchString like (2. Spalte von meine meineView)
searchString like (3. Spalte von meine meineView)
searchString like (4. Spalte von meine meineView)
searchString like (5. Spalte von meine meineView)

Dankääää

Bernd

Hi Bernd,
Du greifst ja über JDBC auf Deine Datenbank zu. Dann kannst Du doch in einem ersten Schritt ermitteln, wie Deine Spalten heißen:

select column\_name 
 from user\_tab\_columns 
 where table\_name='VIEW\_NAME\_ACHTUNG\_CASE\_SENSITIV' and data\_type='VARCHAR2';

Dann kannst Du Dir dynamisch ein SQL-Statement bauen à la:

SELECT PKey 
 FROM View\_name
 WHERE Spalte1 || Spalte2 || .. || Spalte3 LIKE '%Suchstring%';

Gruß

J.

(P.S. Du kannst mich auch so fragen, meine Nummer hast Du ja…)

Frage zum Statemnet!!!
Ich habe den Abschnitt mit Interesse gelesen.
Aber beim ausprobieren habe ich den Eindruck, daß innerhalb
der Spalten nach dem String gesucht wird.
Ich meine, daß alle Spalten, die ich angebe den Inhalt dieses Strings haben müssen und nicht nur eine der ‚vielen‘ Spalten.
Sorry wenn ich mich einmische, aber ich würde auch gerne ws lernen/verstehen.

SELECT PKey
FROM View_name
WHERE Spalte1 || Spalte2 || … || Spalte3 LIKE ‚%Suchstring%‘;

Gruß

Uwe

Ich habe den Abschnitt mit Interesse gelesen.
Aber beim ausprobieren habe ich den Eindruck, daß innerhalb
der Spalten nach dem String gesucht wird.
Ich meine, daß alle Spalten, die ich angebe den Inhalt dieses
Strings haben müssen und nicht nur eine der ‚vielen‘ Spalten.

SELECT PKey
 FROM View\_name
 WHERE Spalte1 || Spalte2 || .. || Spalte3 LIKE '%Suchstring%';

Hi Uwe,
die WHERE-Klausel konkateniert sämtliche gefundenen Spalten und vergleicht das Ergebnis mit dem Suchstring, d.h., wenn mindestens eine Spalte den Suchstring enthält, gibt es eine Fundstelle.

Gruß

J.

Aber…
Wenn ich statt Suchstring einen String angebe (LIKE ‚100‘:wink:
kommt kein Ergebnis.
Das sollte aber doch keinen Unterschied machen?

Gruß

uwe

Wenn ich statt Suchstring einen String angebe (LIKE ‚100‘:wink:
kommt kein Ergebnis.

Nun, es kommt genau dann ein Ergebnis, wenn eine Spalte ‚100‘ enthält und alle anderen NULL.

Das sollte aber doch keinen Unterschied machen?

Wie denn? Du suchst ohne Jokerzeichen, also fragst Du eigentlich nicht
WHERE Blabla LIKE ‚100‘
sonndern
WHERE Blabla = ‚100‘
Das ist doch ein Unterschied!

Das Thema ist, daß ich unendlich lange Ausdrücke vermeiden möchte
(WHERE Spalte1 LIKE ‚%100%‘ OR Spalte2 LIKE ‚%100%‘ OR … OR Spaltex LIKE ‚%100%‘ ); deswegen wird zu einem Ausdruck konkateniert, und darauf ein Vergleich angesetzt.

Aber ich glaube, ich verstehe Deine Frage nicht ganz.

Gruß

J.

Glaube ich auch, bzw, ich Euer Thema nicht?
Ich meinte, ich suche einen Wert, z.B. 100 in einer Spalte.
Ich weiß aber nicht, ob es Spalte A, B, C oder D ist.
Das ganze natürlich mit Deinem Befehl, es geht auch anders.
Nur bei mir kommt da nie ein Ergebnis, er findet immer 0 rows.
Wenn ich aber nach > ‚000‘ suche kommen Ergebnisse.
Gib bitte nicht auf, und versuchs mir zu erklären…

Grüße

String int
Hi!

Weiß auf die Schnelle net genau, aber das Problem könnt sein, daß du einen String in einem integerfeld suchst…

Versuch´s mal indem du einfach per like 100 (oder = 100) suchst statt like ‚100‘

Gruß

Bernd

Danke,ist es aber leider nicht… o.T.
x

Ich meinte, ich suche einen Wert, z.B. 100 in einer Spalte.
Ich weiß aber nicht, ob es Spalte A, B, C oder D ist.
Nur bei mir kommt da nie ein Ergebnis, er findet immer 0 rows.
Wenn ich aber nach > ‚000‘ suche kommen Ergebnisse.
Gib bitte nicht auf, und versuchs mir zu erklären…

Ich versuchs.
Wie lautet Dein Statement? Vermutlich so oder so ähnlich:

select * from tabelle where a||b||c||d like ‚100‘;

Nehmen wir an, die Spalten eines Datensatzes haben folgende Werte:
a: ‚a‘
b: ‚b‘
c: ‚100‘
d: ‚c‘
a||b||c||d enthält folglich ‚ab100d‘
Verglichen mit LIKE ‚100‘ ist das sicher falsch, da like ohne jokerzeichen dem Gleichheitsoperator enspricht, und
‚ab100d‘ ‚100‘
‚ab100d‘ verglichen mit > ‚000‘ ergibt true, denn a > b bei Varchars über die Sortierreihenfolge der ASCII-Codes geht, also
‚0‘ ‚000‘
Das erklärt Deine Fundstelle.
Richtig ist der Vergleich mit LIKE ‚%100%‘, da
‚ab100d‘ ist „irgendwas“ gefolgt von ‚100‘ gefolgt von „Irgendwas“ ===>
‚ab100d‘ LIKE ‚%100%‘ ergibt true.

Verstanden?

Das ganze natürlich mit Deinem Befehl, es geht auch anders.

Ja, das war eher ein Nebenschauplatz, es ging anfangs darum, daß die Spaltennamen nicht bekannt sind. Aber wie man an die herankommt, ist hoffentlich schon klar!

Gruß

J.

Danke! Auch für Deine Geduld!!!
Ich gleube, es verstanden zu haben.

Grüße