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
e.t.bussmann [ Di, 06 Dezember 2005 20:32 ] [ ID #1089888 ]

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
Andreas Seltenreich [ Di, 06 Dezember 2005 23:55 ] [ ID #1089890 ]

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
e.t.bussmann [ Mi, 07 Dezember 2005 00:02 ] [ ID #1089891 ]
Datenbanken » gmane.comp.db.postgresql.german » PL/pgSQL Zuweisungsoperator

Vorheriges Thema: postgreSQL tunen
Nächstes Thema: Werte Prüfen und anderes Feld mit Resultat füllen