yallayalla Geschrieben 30. März 2006 Geschrieben 30. März 2006 Hallo! Wie erstelle ich in PL/SQL ein Array und wie wird das dann angesprochen? Ein eindimensionales Array würde reichen. Danke für jeden Tip! gruss yallayalla
zirri Geschrieben 30. März 2006 Geschrieben 30. März 2006 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.
yallayalla Geschrieben 30. März 2006 Autor Geschrieben 30. März 2006 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
Pinhead Geschrieben 30. März 2006 Geschrieben 30. März 2006 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;
yallayalla Geschrieben 30. März 2006 Autor Geschrieben 30. März 2006 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
Ganymed Geschrieben 31. März 2006 Geschrieben 31. März 2006 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;
yallayalla Geschrieben 31. März 2006 Autor Geschrieben 31. März 2006 Hallo! Also quasi so: TYPE mein_array IS TABLE OF VARCHAR(500) INDEX BY BINARY_INTEGER; mfg yallayalla
Ganymed Geschrieben 31. März 2006 Geschrieben 31. März 2006 Ja, genau so Ist aber dann halt nur mit Varchars befüllbar
mme Geschrieben 31. März 2006 Geschrieben 31. März 2006 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.
yallayalla Geschrieben 31. März 2006 Autor Geschrieben 31. März 2006 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
mme Geschrieben 31. März 2006 Geschrieben 31. März 2006 Genau das macht mein Vorschlag auch nur mit weniger ressourcen... Willst damit sagen mein vorschlag gefällt dir nicht oder hast du weitere Anforderungen???
yallayalla Geschrieben 31. März 2006 Autor Geschrieben 31. März 2006 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
yallayalla Geschrieben 31. März 2006 Autor Geschrieben 31. März 2006 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
mme Geschrieben 31. März 2006 Geschrieben 31. März 2006 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;
Empfohlene Beiträge
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 erstellenAnmelden
Du hast bereits ein Benutzerkonto? Melde Dich hier an.
Jetzt anmelden