# [Oracle 10] Datensätze mit long Werten kopieren



## docsmuell (6. Juni 2008)

Hallo alle zusammen,

ich muß Datensätze aus einer Tabelle die (leider) einen long enthält, in eine Zwischentabelle kopieren , Daten verändern und wieder zurückkopieren.

Bekomme dann immer den Oracle Fehler 997.

In sämtlichen Internetquellen ist davon die Rede den Long wert in einen CLOB umzuwandeln.
Wie mache ich das? Und was tue ich wenn ich den Inhalt der Temp Tabelle wieder zurückkopiere?

Hoffe mir kann jemand helfen, vielen Dank im Voraus.


----------



## Albiorix (10. Juni 2008)

Hm, ein paar Anmerkungen bzw. Fragen

1. Warum die Werte in eine temp. Tabelle kopieren, bearbeiten und wieder zurückschreiben? Dafür gibt es doch PL/SQL, da kann man die Daten auch direkt bearbeiten.

2. ORA-00997: Illegal Use of LONG-Datatype, d.h. das Feld steht in deiner Abfrage irgendwo in der WHERE-Clause, oder im DISTINCT oder so, das ist nicht erlaubt. (http://ora-00997.ora-code.com)

3. Es ist nicht zwingend notwendig, die LONG-Felder in CLOB umzuwandeln. Oracle hat die Spalte (eigentlich) nur noch aus Kompatibiltätsgründen drin. Wenn sie schon mal das sind, und deine Anwendung läuft, lass sie so laufen.

Ansonsten, nur so mal als Beispiel, ein PL/SQL-Block, der eine LONG-Spalte modifiziert und in die DB zurückschreibt:

```
DECLARE
  v LONG;

  CURSOR c IS
    SELECT .., long_spalte, ... 
      FROM tabelle_mit_long_feld
      FOR UPDATE OF long_spalte;

BEGIN
  FOR i IN c LOOP
    IF (irgendeine Bedingung zum bearbeiten) THEN
      v := (was auch immer ich mit i.long_spalte machen will);
      
      UPDATE tabelle_mit_long_feld
         SET long_spalte = v
       WHERE CURRENT OF c;
    END IF;
  END LOOP;
END;
```

und voila, schon stehen die modifizierten Werte wieder in der Tabelle drin

Hoffe geholfen zu haben

Sascha


----------

