Ergebnis-Zeilen einer SELECT Abfrage in Array speichern und durchiterieren

Hallo,

ich beschäftige mich noch nicht so lange mit PSQL. Allerdings bin ich momentan dabei, eine Funktion(PL/pgSQL) zu schreiben die für eine Datenaufbereitung in einem Datawarehouse benötigt werden. Es geht um Artikeldaten(Kalkulationsblätter) die aus einem Kopf und einem Tabellenteil bestehen (in jeweils einer Tabelle). Jeder Artikel kann aus unterartikeln bestehen (beliebig viele). Für diese Unterartikel müssen Stufen vergeben werden.
OK, soviel zur Ausgangssituation.

Was ich wissen möchte, ist eigentlich fürs Erste nur: wie kann ich das Ergebnis einer SELECT-Abfrage in ein Array speichern (also die Zeilen) um diese dann Zeile für Zeile durch zu iterieren und weiter zu verarbeiten ?

danke schonmal,
hafi

PostgreSQL: Documentation: Manuals: PostgreSQL 8.1: Control Structures

Andreas

Danke. Damit wäre das erste Problem gelöst, stellt sich aber direkt das nächste.
Die Inhalte werden also in der RECORD Variable gespeichert. Jetzt habe ich das Probelm, dass ich nicht weiss, wie viele Stufen eben ein Artikel hat, also auch nicht wie viele verschiedene RECORDs ich brauche, da das Programm sich, ja quasi immer wieder selbst aufrufen müsste.

Zum Verständnis: Als Struktogramm müsste die Funktion in etwa so aussehen

Nun, auch das sollte gehen…

Andreas

Die Frage ist nur das “wie”. Wird nicht dann immer bei einem Verschachtelten Aufruf nach dem Wiederaufruf durch sich selbst die RECORD Variable wieder überschrieben?
Noch ein Gedanke dazu:
Wenn ich den Teil der sich wiederholt in eine eigene Funktion packe, kann ich ihn Problemlos immer wieder auch innerhalb von sich selbst(rekursion) aufrufen, oder?

Mein Problem ist ganz einfach, dass ich vorher noch nicht wirklich in PL/pgSQL programmiert habe :confused:

http://www.pg-forum.de/sql/1503-rekursive-abfragen.html

Andreas

Merci! das hilft :slight_smile:

Eine Frage noch dazu:
Wie kann ich das Ergebnis einer SELECT-Abfrage prüfen, ob mehr als 0 Zeilen gefunden wurden?
Konnte dazu auf die Schnell nichts finden…

Durchiterieren und zählen?

Andreas

JA, ich meinte kann man das auch direkt irgendwie auf 0 Zeilen prüfen?

edit: hat sich erledigt, habs mit COUNT(*) gelöst

Alternativ: PostgreSQL: Documentation: Manuals: PostgreSQL 8.2: Basic Statements

Kurzzeitig war hier wohl ein Beitrag von Dir mit der Lösung eines zusätzlichen select count(*). Das ist suboptimal, weil sich die Tabelle zwischen den Aufrufen verändern könnte bzw. es ist teuer im Sinne von Laufzeit etc.

Andreas

Ja, hatte das ganze jetzt mit COUNT(*) gelöst.
Die Tabellen werden sich während des laufs nicht verändern im Normalfall, da hier nur beim nächtlichen Import neue Daten eingefügt werden und danach erst die Aufbereitung gestartet wird. Von daher müsste es ja eigentlich damit auch funktionieren.

Werde mir trotzdem mal die anderen Ansätze ankucken, danke.