yallayalla Geschrieben 30. März 2006 Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
zirri Geschrieben 30. März 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 30. März 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Pinhead Geschrieben 30. März 2006 Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 30. März 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 31. März 2006 Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 31. März 2006 Autor Teilen Geschrieben 31. März 2006 Hallo! Also quasi so: TYPE mein_array IS TABLE OF VARCHAR(500) INDEX BY BINARY_INTEGER; mfg yallayalla Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Ganymed Geschrieben 31. März 2006 Teilen Geschrieben 31. März 2006 Ja, genau so Ist aber dann halt nur mit Varchars befüllbar Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 31. März 2006 Teilen 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. Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 31. März 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 31. März 2006 Teilen 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??? Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 31. März 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
yallayalla Geschrieben 31. März 2006 Autor Teilen 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 Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
mme Geschrieben 31. März 2006 Teilen 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; Zitieren Link zu diesem Kommentar Auf anderen Seiten teilen Mehr Optionen zum Teilen...
Empfohlene Beiträge
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.