Wozu werden die folgenden Deklarationen verwendet und wo werden diese Deklarationstypen verwendet?Unterschiede zwischen ROWTYPE, TYPE und RECORD in Postgresql?
myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
Wozu werden die folgenden Deklarationen verwendet und wo werden diese Deklarationstypen verwendet?Unterschiede zwischen ROWTYPE, TYPE und RECORD in Postgresql?
myrow tablename%ROWTYPE;
myfield tablename.columnname%TYPE;
arow RECORD;
Von PostgreSQL's documentation:
TYPE
liefert den Datentyp einer Variablen oder Tabellenspalte. Sie können damit Variablen deklarieren, die Datenbankwerte enthalten. Angenommen, Sie haben in Ihrer users
Tabelle eine Spalte mit dem Namen user_id
. Um eine Variable mit dem gleichen Datentyp wie users.user_id
zu deklarieren, schreiben Sie: user_id users.user_id%TYPE;
.
ROWTYPE
: Eine Variable eines zusammengesetzten Typs wird als Zeilenvariable (oder Zeilentypvariable) bezeichnet. Eine solche Variable kann eine ganze Zeile eines SELECT
oder FOR
Abfrageergebnisses enthalten, solange der Spaltensatz dieser Abfrage dem deklarierten Typ der Variablen entspricht. Auf die einzelnen Felder des Zeilenwerts wird mit der üblichen Punktnotation zugegriffen, z. B. rowvar.field
.
RECORD
: Datensatzvariablen ähneln zeilenartigen Variablen, sie haben jedoch keine vordefinierte Struktur. Sie übernehmen die eigentliche Zeilenstruktur der Zeile, der sie bei einem SELECT
oder FOR
Befehl zugewiesen sind. Die Unterstruktur einer Datensatzvariablen kann sich bei jeder Zuweisung ändern. Eine Konsequenz davon ist, dass, bis eine Datensatzvariable zuerst zugewiesen wird, keine Unterstruktur vorhanden ist und jeder Versuch, auf ein Feld zuzugreifen, einen Laufzeitfehler verursacht.
Siehe den Link für ausführlichere Beispiele.