... | ... | @@ -183,7 +183,7 @@ c2 CURSOR; |
|
|
|
|
|
#### Einen Cursor verwenden
|
|
|
|
|
|
Bevor ein Cursor verwendet werden kann, muss dieser geöffnet werden. Das öffnen unterscheidet sich, je nachdem ob es sich um einen _bound_ oder _unbound_ Cursor handelt:
|
|
|
Bevor ein Cursor verwendet werden kann, muss dieser geöffnet werden. Das Öffnen unterscheidet sich, je nachdem ob es sich um einen _bound_ oder _unbound_ Cursor handelt:
|
|
|
```sql
|
|
|
open c1; --bound cursor
|
|
|
open c2 FOR SELECT * FROM flug; --unbound cursor
|
... | ... | @@ -221,7 +221,7 @@ Mit ``CLOSE c1`` wird der geöffnete Cursor _c1_ wieder geschlossen. |
|
|
|
|
|
#### Iteration mittels FOR-Schleife
|
|
|
|
|
|
Alternativ zum oben genannten Vorgehen kann auch eine For-Schleife verwendet werden, um über einen Cursor zu iterieren:
|
|
|
Alternativ zum oben genannten Vorgehen kann auch eine FOR-Schleife verwendet werden, um über einen Cursor zu iterieren:
|
|
|
```sql
|
|
|
declare
|
|
|
zeile record;
|
... | ... | @@ -238,7 +238,7 @@ Weitere Informationen zu Cursors [hier](https://www.postgresql.org/docs/current/ |
|
|
|
|
|
### SQL-Abfragen mit Zuweisung einer einzigen Ergebniszeile
|
|
|
|
|
|
Sie können SQL-Abfragen in einem PL/pgSQL Block starten und das Ergebnis in einer oder mehreren Variablen speichern. Die Datentypen der Variable kann dabei atomar oder aber vom Typ _record_, also einer Tabellenzeile, sein.
|
|
|
Sie können SQL-Abfragen in einem PL/pgSQL Block starten und das Ergebnis in einer oder mehreren Variablen speichern. Die Datentypen der Variablen können dabei atomar oder aber vom Typ _record_, also einer Tabellenzeile, sein.
|
|
|
|
|
|
**Wichtig**: Es wird immer nur die erste _Zeile_ des Ergebnisses gespeichert!
|
|
|
|
... | ... | @@ -251,7 +251,7 @@ Beispiel: |
|
|
select count(*) into anzahl from eteil;
|
|
|
```
|
|
|
|
|
|
Mit dieser Syntax kann man sich insbesondere eine Cursordeklaration sowie das zeilenweise Iterieren über den Cursor ersparen.
|
|
|
Mit dieser Syntax kann man sich insbesondere eine Cursordeklaration sowie das zeilenweise Iterieren über den Cursor ersparen, wenn man sicher ist, dass die Ergebnismenge des selects aus maximal einer Zeile besteht.
|
|
|
|
|
|
Weitere Informationen [hier](https://www.postgresql.org/docs/current/sql-selectinto.html).
|
|
|
|
... | ... | @@ -323,7 +323,7 @@ drop function test(); |
|
|
|
|
|
### Trigger in Postgres
|
|
|
|
|
|
Trigger sind im Wesentlichen _Listener_, die bei Eintreten eines Events eine Aktion ausführen. Mögliche Events sind die Update-Operatoren ``insert, update, delete`` oder auch ``truncate`` auf einer beliebigen Tabelle bzw. View sein.
|
|
|
Trigger sind im Wesentlichen _Listener_, die bei Eintreten eines Events eine Aktion ausführen. Mögliche Events sind die Update-Operatoren ``insert, update, delete`` oder auch ``truncate`` auf einer beliebigen Tabelle bzw. View.
|
|
|
|
|
|
Ein Trigger kann entweder _vor_ (``before``), _nach_ (``after``) oder aber _anstatt_ (``instead of``) des Events "feuern", d.h. die Aktion ausführen. Die auszuführende Aktion wird in einer Stored Function beschrieben, deren Rückgabedatentyp als ``trigger`` deklariert sein muss.
|
|
|
|
... | ... | |