Re: Problem mit Array Funktionen

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

In response to

Responses

Browse pgsql-de-allgemein by date

  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