PL-SQL

BLR

Erfahrenes Mitglied
Hallo zusammen :)

ich möchte in meiner PL-SQL Funktion eine temporäre Tabell erzeugen und diese anschließend sortieren und sortiert speichern.
Dafür mache ich folgendes:

SQL:
EXECUTE IMMEDIATE 'CREATE TABLE tempTable( num NUMBER)';

dann fühle ich die Tabelle "tempTable" mit Werten und anschließend führe ich:

SQL:
EXECUTE IMMEDIATE 'ALTER TABLE tempTable ORDER BY num DESC';
damit die Tabelle absteigend die Werte beinhaltet.

Leider kommt da ORA-00955: name is already used by an existing object
00955 tritt dann auf, wenn ich eine Tabelle erzeugen möchte, die bereits existiert.
Ich verwende aber ALTER und nicht CREATE.
Deswegen wundere ich mich über diesen Fehler.
Hat jemand einen Rat für mich?
Danke
 
  1. Das ist keine Temporäre Tabelle sondern einfach nur eine ganz normale Tabelle. In Oracle gibt es die Global Temporary Tables (GTT): https://asktom.oracle.com/pls/asktom/f?p=100:11:0::::P11_QUESTION_ID:48812348054 und http://oracle-base.com/articles/misc/temporary-tables.php
  2. Warum execute immediate? Ich denke in deiner Prozedur kannst du direkt CREATE TABLE tempTable( num NUMBER); commit; schreiben
  3. EXECUTE IMMEDIATE 'ALTER TABLE tempTable ORDER BY num DESC'; das wird nicht funktionieren. Alter table funktioniert nicht so. Zudem ist es auch egal in welcher Reihenfolge die Daten in der Tabelle abgespeichert sind. Die Reihenfolge ist ja erst dann wichtig,wenn du wieder von der Tabelle liest. eg. select num from tempTable order by num desc;
  4. Was du höchstens machen könntest, wäre beim insert in die Tabelle bereits die Daten sortiert zu selektieren: eg. insert into tempTable select mynumber from mytable order by mynumber desc; Aber du musst auch wissen, dass wenn man in SQL beim select kein order by definiert, es keine Garantie dafür gibt in welcher Reihenfolge die Daten geliefert werden.
 
Zurück