PL/pgSQL Zuweisungsoperator
Hallo zusammen,
ich hab mal ne ganz simple Frage: Laut Doku (38.6.1) ist in PL/pgSQL der
Zuweisungsoperator (zum Zuweisen eines Wertes einer Variablen) :=3D
Nun habe ich aber festgestellt, dass ein simples =3D anscheinend
gleichbedeutend ist. Ist dies nun eine (unsupported) Alternative oder hat
der =3D Operator ansich eine andere Bedeutung (die hat er zweifelsfrei al=
s
Vergleichsoperator - obwohl er anscheinend auch zuweisen kann. btw: es gi=
bt
keinen =3D=3D Operator, den müsste man jedoch wie andere Vergleichsoper=
atoren
selbst erstellen können)
Gruß
Tobias
---------------------------(end of broadcast)---------------------------
TIP 4: Have you searched our list archives?
http://archives.postgresql.org
Re: PL/pgSQL Zuweisungsoperator
Tobias Bußmann writes:
> ich hab mal ne ganz simple Frage: Laut Doku (38.6.1) ist in PL/pgSQL de=
r
> Zuweisungsoperator (zum Zuweisen eines Wertes einer Variablen) :=3D
> Nun habe ich aber festgestellt, dass ein simples =3D anscheinend
> gleichbedeutend ist. Ist dies nun eine (unsupported) Alternative oder h=
at
> der =3D Operator ansich eine andere Bedeutung
Ein Blick in die plpgsql-Lexer zeigt, daß beide als das selbe Token
enden:
src/pl/plpgsql/src/scan.l
--8<---------------cut here---------------start------------->8---
:=3D { return K_ASSIGN; }
=3D { return K_ASSIGN; }
--8<---------------cut here---------------end--------------->8---
> (die hat er zweifelsfrei als Vergleichsoperator - obwohl er
> anscheinend auch zuweisen kann. btw: es gibt keinen =3D=3D Operator, de=
n
> müsste man jedoch wie andere Vergleichsoperatoren selbst erstellen
> können)
Man muß hier beachten, welcher Teil des Codes von plpgsql, und welcher
von Postgres geparst wird. So sieht die Produktion für das
plpgsql-Assignment-Statement aus:
src/pl/plpgsql/src/gram.y
--8<---------------cut here---------------start------------->8---
stmt_assign : assign_var lno K_ASSIGN expr_until_semi
--8<---------------cut here---------------end--------------->8---
Während K_ASSIGN der plpgsql-Operator mit fester Zuweisungs-Semantik
ist, landen nachfolgende Operatoren in expr_until_semi bei der
Ausführung der Funktion beim SQL-Parser, was sie der Semantik der
SQL-Operatoren unterwirft.
Gruß
Andreas
--
---------------------------(end of broadcast)---------------------------
TIP 5: don't forget to increase your free space map settings
Re: PL/pgSQL Zuweisungsoperator
Hallo Andreas,
vielen Dank für deine präzisen Ausführungen. Da habe ich wieder etw=
as
gelernt!
Gruß
Tobias
Andreas Seltenreich <andreas+pg [at] gate450.dyndns.org> wrote:
> Tobias Bußmann writes:
>
>> ich hab mal ne ganz simple Frage: Laut Doku (38.6.1) ist in PL/pgSQL
>> der Zuweisungsoperator (zum Zuweisen eines Wertes einer Variablen) :=3D
>> Nun habe ich aber festgestellt, dass ein simples =3D anscheinend
>> gleichbedeutend ist. Ist dies nun eine (unsupported) Alternative
>> oder hat der =3D Operator ansich eine andere Bedeutung
>
> Ein Blick in die plpgsql-Lexer zeigt, daß beide als das selbe Token
> enden:
>
> src/pl/plpgsql/src/scan.l
> --8<---------------cut here---------------start------------->8---
> :=3D { return K_ASSIGN; }
> =3D { return K_ASSIGN; }
> --8<---------------cut here---------------end--------------->8---
>
>> (die hat er zweifelsfrei als Vergleichsoperator - obwohl er
>> anscheinend auch zuweisen kann. btw: es gibt keinen =3D=3D Operator, d=
en
>> müsste man jedoch wie andere Vergleichsoperatoren selbst erstellen
>> können)
>
> Man muß hier beachten, welcher Teil des Codes von plpgsql, und welche=
r
> von Postgres geparst wird. So sieht die Produktion für das
> plpgsql-Assignment-Statement aus:
>
> src/pl/plpgsql/src/gram.y
> --8<---------------cut here---------------start------------->8---
> stmt_assign : assign_var lno K_ASSIGN expr_until_semi
> --8<---------------cut here---------------end--------------->8---
>
> Während K_ASSIGN der plpgsql-Operator mit fester Zuweisungs-Semantik
> ist, landen nachfolgende Operatoren in expr_until_semi bei der
> Ausführung der Funktion beim SQL-Parser, was sie der Semantik der
> SQL-Operatoren unterwirft.
>
> Gruß
> Andreas
---------------------------(end of broadcast)---------------------------
TIP 3: Have you checked our extensive FAQ?
http://www.postgresql.org/docs/faq