Hallo zusammen,
ich lerne gerade PostgreSQL (8.3.7) kennen (berufsbedingt) und arbeite mich in Pl/Pgsql ein. Mache also meine ersten Gehversuche. Beim Testen bin ich darauf gestoßen, dass eine Zuweisung auch mit ‘=’ funktioniert (sollte doch ‘:=’ sein). Und anscheinend kann man auch unterschiedliche Composite Types einander zuweisen, wenn die Basis-Datentypen passen.
Sind das Features ? Sollte man die Finger davon lassen ?
Mich würde interessieren, was da im Hintergrund passiert. Kann man das irgendwo nachlesen ?
Hier mein Beispiel-Code:
create or replace function test_assign() returns void as $$
DECLARE
i integer;
dat_1 data;
extdat_1 extended_data;
dat_2 data;
extdat_2 extended_data;
dat_3 data;
extdat_3 extended_data;
alien alien_data;BEGIN
i = 3; -- falsch, sollte heissen : i := 1; wieso funktioniert das ??
raise notice 'integer i : %', i;
i = i+1; -- falsch, sollte heissen : i := i + 1;
raise notice 'integer i : %', i;
dat_1 := (3.141,'pi',TRUE);
extdat_2 := (2.718,'auch berühmt',TRUE,1234567890);
extdat_3 := (0.0,NULL,TRUE,9876543210);
extdat_1 := dat_1;
dat_2 := extdat_2; -- Zuweisungen funktionieren, was passiert da ??
dat_3 := extdat_3;
-- alien := extdat_2; -- ERROR: invalid input syntax for type boolean: "auch berühmt"
raise notice ' dat_1 = %' , dat_1;
raise notice 'extdat_1 := dat_1; extdat_1 = %' , extdat_1;
raise notice ' extdat_2 = %' , extdat_2;
raise notice 'dat_2 := extdat_2; dat_2 = %' , dat_2;
raise notice ' extdat_3 = %' , extdat_3;
raise notice 'dat_3 := extdat_3; dat_3 = %' , dat_3;
-- raise notice 'alien := extdat_2; alien = %' , alien;
END;
$$ language plpgsql;
Wollte noch die Ausgabe des Codes zeigen, … aber die Vorschau streikt. Gibt’s eine Längenbeschränkung ???