Zum Inhalt springen

Auswahlliste aus Tabellenspalte in eigene Tabelle auslagern.


Jaraz

Empfohlene Beiträge

Hallo,

ich habe zum Beispiel folgende Tabelle:


-----------------

|name |typ      |

-----------------

|Ralf |Leiter   |

|Jörg |Mitglied |

|Marc |Leiter   |

-----------------


Den typ möchte ich nun in eine eigene Tabelle auslagern:


-----------------

|name |typ      |

-----------------

|Ralf |1        |

|Jörg |2        |

|Marc |1        |

-----------------


------------------

|typid |wert     |

------------------

|1     |Leiter   |

|2     |Mitglied |

------------------


Also sozusagen nachträgliche Normalisierung von bestehenden Daten.

Hat das jemand für Oracle schon mal gemacht und als Skript fertig rumliegen?

Das ich die Spalten und Tabellennamen dann anpassen müsste, ist mir schon klar.

Oder weiß jemand ein Tool mit dem ich sowas für Oracle machen könnte?

Notfalls auch für andere Datenbanken, ich schreibe mir das dann um.

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo,

ich könnte mir folgendes Szenario vorstellen.

Die neue Tabelle mit typid und wert anlegen und füllen. Danach ein update auf die andere Tabelel machen.

update Tabelle set typ=1 where typ="Leiter";

....

Jetzt kommt es drauf an, wie viele Typen es gibt. Wenn es eine überschaubare Anzahl ist, sollte es relativ schnell gehen.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Fertiges Script habe ich nicht aber, selbst machen ist in:

1. Du machst auf typid ne Sequenz, und füllst die Tabelle mit den Typen über einen select distinct.

2. Du füllst die Tabelle mit den Personen über einen insert into table(select ...)

3. Den Typ für jede Person kannst du über einen Join realisieren (ebenfalls insert into table (select...))

Diese Info sollte nur ein Denkanstoss sein.

sorry, war zu spät.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ich weiss jetzt zwar nicht, was IDS bei Oracle ist, aber Du könntest doch eine Group by Selektion auf die Werte in der Originaltabelle machen und den select in ein insert Statement packen

insert tabelle_neu select werte from tabelle_alt group by ......

Dann solltest Du alle Einträge einmal in der neuen Tabelle haben.

Frank

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von The_red_one

1. Du machst auf typid ne Sequenz, und füllst die Tabelle mit den Typen über einen select distinct.

klar

Original geschrieben von The_red_one

2. Du füllst die Tabelle mit den Personen über einen insert into table(select ...)

Das ist es was mir zu meinem Glück fehlt. :D Danke!

Manchmal ist die Lösung einfacher als man denkt. :rolleyes:

Original geschrieben von The_red_one

3. Den Typ für jede Person kannst du über einen Join realisieren (ebenfalls insert into table (select...))

klar

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Durch die ganzen Restriktionen bei Oracle war das doch nicht so einfach wie gedacht:

aber hier nun die Lösung:

Ersetzt wird Spalte IPTYP in Tabelle NETZWERKKOMPONENTE durch TYPID

Erzeugt wird Tabelle IPTYP mit den Spalten TYPID und TYP.


CREATE TABLE IPTYP

(

  TYP    VARCHAR2(255),

  TYPID  NUMBER(19)

);


CREATE SEQUENCE IPTYP_SEQ 

START WITH 1 

INCREMENT BY 1 

NOMAXVALUE; 


CREATE OR REPLACE TRIGGER IPTYP_TRIGGER

BEFORE INSERT ON IPTYP

FOR EACH ROW

BEGIN

SELECT IPTYP_SEQ.NEXTVAL INTO :NEW.TYPID FROM DUAL;

END;

/


INSERT INTO IPTYP SELECT DISTINCT IPTYP AS TYP, NULL AS TYPID FROM NETZWERKKOMPONENTE ORDER BY IPTYP;


ALTER TABLE SCOTT.NETZWERKKOMPONENTE

  ADD TYPID NUMBER(19);


UPDATE NETZWERKKOMPONENTE SET NETZWERKKOMPONENTE.TYPID = (SELECT IPTYP.TYPID FROM IPTYP WHERE IPTYP.TYP = NETZWERKKOMPONENTE.IPTYP);


ALTER TABLE SCOTT.NETZWERKKOMPONENTE

 DROP (IPTYP);

ohne jede Gewähr ;)

Gruß Jaraz

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...