Zum Inhalt springen

Array in PL/SQL


yallayalla

Empfohlene Beiträge

in PL/SQL kannst Du mit Collections arbeiten.

Da gaebe es 3 verschiedene:

assoziative Arrays, VARRAYs und geschachtelte Tabellen.

Kommt natuerlich auf Deinen Verwendungszweck an.

Jedoch ist PL/SQL in meinen Augen keine 'Programmiersprache' in denen Arrays verwendung finden.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

naja, ich brauche das Array, da ich im vorhinein nicht weiss, wieviele Daten mir ein bestimmter Select zurueckliefert.

allerdings brauche ich die einzelnen Elemente des Selects und zwar so, das ich sie einzeln ansprechen kann.

Einzige andere Idee waere, so 100 Dummyvariablen zu nehmen (quasi ein aufgelöstes Array). Aber prinzipiell kann ich doch ein Array benutzen, oder?

mfg

yallayalla

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

Joo, Cursor kenne ich :-)

Sache ist die:

Cursor 1: Select Liste von Tabellen

Select Anzahl Spalten der 1 tabelle von Cursor1

Dann sollen die Elemente jeder Zeile in einzelne Variablen geschrieben werden.

Ok, das geht mit nem Cursor, ABER:

Die Tabellen sind nicht alle gleich aufgebaut!

Was will ich machen:

1. Cursor soll Liste der Tabellen, die Bedingung X erfüllen, durchgehen.

2. Select coutn über all_tables liefert mir die Spaltenanzahl in eine Variable

3. Jede Zeile der Tabelle soll spalte für Spalte in eine Variable geschrieben werden. Schleife.

4. Aus den Variablen soll dann über eine weitere Schleife der INSERT INTO Befehl zum Schreiben der Inhalte generiert werden.

1,2,4 ist nicht das Prob!

3 schon, da ich mal 3, mal 15 Spalten haben kann...Mit nem Array könnte ich halt easy die entsprechende menge variablen vorhalten, die ich brauche....

mfg

yallayalla

Link zu diesem Kommentar
Auf anderen Seiten teilen

Eine Art "Array" wird wiefolgt deklariert:

TYPE Array_Datentyp IS TABLE OF NUMBER

INDEX BY BINARY_INTEGER;

Man kann auch "TABLE OF VARCHAR2(100)" etc verwenden...

Eine Variable mit diesem Array wir wiefolgt dann deklariert:

Mein_Array Array_Datentyp;

Durchlaufen kann man dann das Array mit Schleifen. In etwa so:

FOR i IN Mein_Array.FIRST..Mein_Array.LAST

LOOP

dbms_output.put_line(Mein_Array(i));

END LOOP;

Befüllen funktioniert quasi genauso:

Mein_Array(1) := 4711;

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du willst also Werte von einer Tabelle in eine andere Schreiben???

insert into tabelle1 as select * from tabelle2

Warum erst in eine Variable schreiben??

Wenn sich die Tabellen und spaltennamen ändern kannst du obiges statement zusammen basteln und dann das ganze Statement mit execute immediate ausführen. Hierbei kannst du auch alle Möglichen modifikationen usw. vornehmen.

Das ganze in eine Schleife die anhand anzahl der Tabellen durch läuft.

Fertig.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

So einfach ist das nicht!

Bei einem Select (=Tabellenliste) wird dann jede Tabelle genommen, deren Spalten gezählt.

Dann wird für jede Spalte eine Variable aus dem Array genommen, damit ich dann über einen Cursor den Spaltenwert einer jeden Zeile in eine eigen Variable schreiben kann um dann daraus einen "INSERT INTO" Befehl daraus zu generieren.

mfg

yallayalla

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hallo!

Die Sache ist das ich den INSERT INTO Befehl (also das SQL-Statement) haben will! Nicht, um es auszuführen, sondern um es abzuspeichern.

Vielleicht habe ich nicht klar definiert, was ich will. Ziel ist bei mir, das ich ein komplettes INSERT INTO Statement habe, das ich dann theoretisch von einem beliebigen SQL-Worksheet aus an eine DB senden kann.

Danke für die Hilfe.

mfg

yallayalla

Link zu diesem Kommentar
Auf anderen Seiten teilen

ja musst du:

(oben erstellst du nur einen komplexen Datentyp (die PL/SQL-Tabelle), von dem du beliebig viele variablen deklarieren kannst.

Declare

TYPE t_column IS TABLE OF VARCHAR(500) INDEX BY BINARY_INTEGER;

v_column t_column;

begin

..

v_column(1):= 'x';

end;

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...