# Where Abfrage auf LONG



## cavigelli (29. April 2005)

Ich habe ein Problem mit der Abfrage auf long... hier meine ABFRAGE:

```
SQL> Select * From GEOLAST where RHT_ID ='2674' and TEXT='Komische Fläche';
Select * From GEOLAST where RHT_ID ='2674' and TEXT='Komische Fläche'
                                               *
FEHLER in Zeile 1:
ORA-00997: illegal use of LONG datatype
```

Ich habe nun einen DESC gemacht... 

```
SQL> DESC GEOLAST
 Name                            Null?    Typ
 ------------------------------- -------- ----
 RHT_ID                          NOT NULL VARCHAR2(10)
 TYP                                      VARCHAR2(1)
 TEXT                                     LONG
```


villeicht seht ihr nun mein Problem ich wär euch sehr dankbar wenn ihr mir helfen könnt...


----------



## hpvw (29. April 2005)

Welches DBMS hast Du denn?
MySQL vermutlich nicht, denn da finde ich keinen "LONG".
LONG kenne ich aus Programmiersprachen als Zahl, damit wäre ein Vergleich auf eine Zeichenkette unsinnig. Zeichenkettenvergleiche kenne ich mit LIKE anstatt Gleichheitszeichen, vielleicht versucht Du das mal.

Und warum ist eine ID ein Char und kein Int?

Gruß hpvw


----------



## cavigelli (29. April 2005)

Also das ganze bassiert auf Oracle...

Das Datenbankmodell ist aus dem Jahre 1996 ...
und es darf nicht angepasst werden...

ich habe nun mit SQL ein Export gemacht von der Tabelle...


```
RHT_ID     T TEXT
---------- - --------------------------------------------------------------------------------
2560       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2561       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2562       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2563       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2564       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2565       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2566       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2567       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2568       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2569       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2570       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2571       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2572       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2573       X Gebiet mit dauernden Bodenverschiebungen gemäss Art. 660a ZGB
2594       X Triangulationspunkt Nr. 12149450
2604       X Unterirdisches Gebäude
2674       X Komische Fläche
2675       X Irgend a Dreck
2676       X Komische Fläche
2677       X Irgend a Dreck
2678       X Komische Fläche
```
Und ja ich kenne LONG auch nur als Zahl aber dann wieso ist hier TEXT drin?


----------



## waterhouse533-lp (29. April 2005)

http://www.adp-gmbh.ch/ora/err/ora_00997.html


----------



## Exceptionfault (29. April 2005)

In Oracle ist der LONG Datentyp für Text gedacht. Man kann dort theoretisch bis zu 2GB Text ablegen. Leider ist es aber auch der schlechteste aller Datentypen den Oracle zu bieten hat, denn schlechter kann man Massendaten eigentlich nicht ablegen...

Oracle selbst empfiehlt diesen Datentyp nicht mehr zu verwenden (obwohl sie selbst im Data Dictionary noch einige Spalten davon haben...) sondern auf CLOB umzusteigen. Das Problem vom LONG Datentyp ist eben dass man damit eigentlich nix machen kann ausser komplett reinschreiben und komplett wieder auslesen. Drin suchen, danach gruppieren etc. geht halt einfach net.

Deine Abfrage kannst du also leider vergessen, so lange du nicht auf einen anderen Datentyp umsteigst. Eine Idee die ich schon erfolgreich getestet habe wäre eine zweite Tabelle anzulegen und per Trigger beim Insert auf die erste Tabelle eine Art "Suchtext" mit Verweis auf den Original Satz abzulegen. Über den kann dann gesucht und evtl. auch gejoint werden. Der Suchtext selbst ist dann eben ein VARCHAR2(4000).


----------

