Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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.

Geschrieben

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

Geschrieben

Man kann in PL/SQL Ergebnisse von Abfrage in einem Cursor bespeichern und diesen dann mit einer Cursor-Schleife durchlaufen.


cursor my_Cursor is

    select some_data from table


  for satz in my_Cursor 

loop

    BEGIN

...

END

  end loop;

Geschrieben

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

Geschrieben

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;

Geschrieben

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.

Geschrieben

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

Geschrieben

Genau das macht mein Vorschlag auch nur mit weniger ressourcen...

Willst damit sagen mein vorschlag gefällt dir nicht oder hast du weitere Anforderungen???

Geschrieben

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

Geschrieben

Hallo Ganymed,

muss ich das Array noch irgendwie initialisieren?

Oder so OK?

Declare

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

begin

..

v_column(1):= 'x';

end;

mfg

yallayalla

Geschrieben

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;

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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