From: | Tim Landscheidt <tim(at)tim-landscheidt(dot)de> |
---|---|
To: | pgsql-de-allgemein(at)postgresql(dot)org |
Subject: | Re: Problem mit Array Funktionen |
Date: | 2010-05-20 19:38:34 |
Message-ID: | m3hbm2z7lx.fsf@passepartout.tim-landscheidt.de |
Views: | Whole Thread | Raw Message | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-de-allgemein |
Bernd Helmle <mailings(at)oopsware(dot)de> wrote:
>>> Der "Name" dieser Abbildung ist nicht das entscheidende Kriterium für
>>> das, was die Funktion "tut", sondern *worauf* sie definiert ist und
>>> *wohin* sie abbildet (umgangssprachlich ausgedrückt - die Mathematiker
>>> unter uns mögen mir verzeihen!). Ich kann mir gut vorstellen, das das
>>> ein wenig verwirrend ist, aber genau *das* macht meines Erachtens nach
>>> PG ja auch aus: die konsequente Logik und Konformität mit den Standards.
>> Nicht nur das, die Fehlermeldung besagt ja auch gerade nicht
>> "function array_to_string does not exist", sondern eben
>> "function array_to_string(*text*) does not exist".
> Ich kann Nicola eigentlich verstehen. Einsteiger tun sich da
> schon ein wenig schwer damit. Eine Möglichkeit wäre, die
> Meldung um einen HINT im Falle einer nicht passenden
> Signatur zu ergänzen. Ob das für diesen konkreten
> Entscheidungszweig machbar ist, weiß ich nicht... müsste man
> sich mal konkret angucken (der Algorithmus für das Auflösen
> von Funktionsaufrufen ist eigentlich schon kompliziert
> genug).
Das ist sicherlich richtig, andererseits muss sich auch ein
Einsteiger mit überladbaren Funktionen auseinandersetzen,
weil er ansonsten spätestens bei:
| tim=# CREATE FUNCTION TestCalc(INT) RETURNS INT AS 'SELECT 2 * $1;' LANGUAGE SQL;
| CREATE FUNCTION
| tim=# -- Moment! NUMERIC wäre besser ...
| tim=# CREATE OR REPLACE FUNCTION TestCalc(NUMERIC) RETURNS NUMERIC AS 'SELECT 2 * $1;' LANGUAGE SQL;
| CREATE FUNCTION
| tim=# -- Richtig ist eigentlich Faktor 3:
| tim=# CREATE OR REPLACE FUNCTION TestCalc(NUMERIC) RETURNS NUMERIC AS 'SELECT 3 * $1;' LANGUAGE SQL;
| CREATE FUNCTION
| tim=# -- Ooops, wieso ist dann das Ergebnis nicht 3?
| tim=# SELECT TestCalc(1);
| testcalc
| ----------
| 2
| (1 Zeile)
| tim=#
auf die Nase fällt.
Tim
From | Date | Subject | |
---|---|---|---|
Next Message | A. Kretschmer | 2010-05-21 04:53:02 | Re: Problem mit Array Funktionen |
Previous Message | Andreas 'ads' Scherbaum | 2010-05-20 18:08:43 | Linuxtag in Berlin 2010 |