Seite 2 von 2 ErsteErste 12
Ergebnis 11 bis 14 von 14

Thema: Kein Result bei RETURN QUERY?

  1. #11
    akretschmer ist offline Super-Moderator
    Registriert seit
    29.10.2006
    Ort
    Dresden
    Beiträge
    5.472

    Standard

    Zitat Zitat von FireFlyer Beitrag anzeigen
    Hi,

    das mache ich doch garnicht oder?
    Ich übergebe eig. nur einen Punkt.

    Viele Grüße,
    Wolfgang

    Für Dich noch mal:

    Code:
    ERROR:  syntax error at or near "$2"
    LINE 1: ...ere st_dwithin( $1 , a.geom, 2)) select t1.id as  $2 , t1.he...
                                                                 ^

    Andreas
    --
    ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
    https://www.xing.com/profile/Andreas_Kretschmer7

  2. #12
    Gisman ist offline Erfahrener Benutzer
    Registriert seit
    20.01.2006
    Ort
    Pfalz
    Beiträge
    794

    Standard

    Benutze es doch einfach auf wie deine eigene Funktion, da steht es doch auch keine $.. drin.

    Gruß Uwe

    PS: die 2 in
    Code:
    st_dwithin( $1 , a.geom, 2)
    muß du noch in den gewünschten Abstand ändern oder auch als Parameter übergeben.
    Geändert von Gisman (23.01.2012 um 16:16 Uhr)
    Have a lot of fun!

  3. #13
    FireFlyer ist offline Neuer Benutzer
    Registriert seit
    21.01.2012
    Beiträge
    6

    Standard

    Hi,

    @Andres: Ich verstehe das Problem leider immer noch nicht.

    @Uwe: Ich verwende keine $, diese erscheinen lediglich in der Fehlerausgabe.

    Hier nocheinmal mein Problem und die Funktion so wie ich sie ausprobiert hatte:

    Gegeben: Tabelle srtm(id serial, point geometry, height integer)
    Problemstellung: Ich möchte zu einem Punkt den nächsten Punkt in dieser Tabelle finden. Zusätzlich darf die Distanz zu diesem Punkt einen gegebenen Threshold nicht überschreiten.

    Lösung:
    -Ansatz 1: Funktion (siehe 1.Post) die mir lediglich die ID des Punktes aus der srtm-tabelle zurückgibt --> funktioniert
    -Ansatz 2: Funktion die mir das vollständige Tupel + die Distanz zu diesem Punkt zurückgibt --> funktioniert nicht (keine Fehler, lediglich 0 Zeilen in Ausgabe bei gleicher Query)

    Hier noch einmal die Funktion die ich von Uwe übernommen hatte (leicht abgeändert auf meine Tabelle):

    Code:
    DROP FUNCTION my_nearest_srtm_neighbor(p_in geometry);
    CREATE OR REPLACE FUNCTION my_nearest_srtm_neighbor(p_in geometry) RETURNS TABLE(id integer, height numeric, point geometry, distance double precision) AS $$
    DECLARE
     
    BEGIN
        RAISE NOTICE 'Point is: %', ST_AsText(p_in);
        
        RETURN QUERY 
        with t1 as 
          (select a.id, a.height, a.point, st_distance(p_in, a.point) as dist
             from srtm a
             where st_dwithin(p_in, a.point, 2))
        select t1.id as id, t1.height as height, t1.geom as point, t1.dist as distance  
          from t1
          where t1.dist = (select min(dist) from t1);
    END;
    $$ LANGUAGE plpgsql;
    Wenn ich das ausführe erhalte ich folgende Fehlermeldung:
    Code:
    ERROR:  syntax error at or near "$2"
    LINE 1: ...re st_dwithin( $1 , a.point, 2)) select t1.id as  $2 , t1.he...
                                                                 ^
    QUERY:   with t1 as (select a.id, a.height, a.point, st_distance( $1 , a.point) as dist from srtm a where st_dwithin( $1 , a.point, 2)) select t1.id as  $2 , t1.height as  $3 , t1.geom as  $4 , t1.dist as  $5  from t1 where t1.dist = (select min(dist) from t1)
    CONTEXT:  SQL statement in PL/PgSQL function "my_nearest_srtm_neighbor" near line 13
    
    ********** Fehler **********
    
    ERROR: syntax error at or near "$2"
    SQL Status:42601
    Kontext:SQL statement in PL/PgSQL function "my_nearest_srtm_neighbor" near line 13
    Zur Vollständigkeit: DBMS ist
    PostgreSQL Version: "PostgreSQL 8.4.9 on x86_64-pc-linux-gnu, compiled by GCC gcc-4.3.real (Debian 4.3.2-1.1) 4.3.2, 64-bit"
    PostGIS Version: "POSTGIS="1.5.1" GEOS="3.2.0-CAPI-1.6.0" PROJ="Rel. 4.6.1, 21 August 2008" LIBXML="2.6.32" USE_STATS"

    Ich hoffe mit diesen Infos könnt ihr mehr anfangen

    Viele Grüße & nochmals Danke,
    Wolfgang

  4. #14
    worstcase ist offline Neuer Benutzer
    Registriert seit
    13.02.2012
    Beiträge
    1

    Standard

    Hallo Wolfgang,

    Das liegt an den Namen deiner out-Parameter, die heissen wie in der Funktion angesprochene Spalten.
    Bezeichne in der Funktion genauer was du meinst (srtm.point, …) oder benenne deine out-Parameter anders, dann klappts.

    PG 8.4 setzt hier bei jedem Vorkommen von "point" die Variable point ($2) ein. Da steht aber nichts drin bei Aufruf, deswegen bekommst du keine Daten. Auch wird die Erstellung einer Funktion abgelehnt, wenn Variablen an Stellen hinersetzt werden sollen, wo keine hingehören.

    Seit 9.0 ist das nicht mehr so. Es wird gemeckert bei Unklarheiten: ("ERROR: column reference point is ambiguous … DETAIL: It could refer to either a PL/pgSQL variable or a table column") und nicht überall stumpf ersetzt (-> "… as point").
    Genauer findest du das hier:PostgreSQL: Documentation: Manuals: PL/pgSQL Under the Hood.

Seite 2 von 2 ErsteErste 12

Ähnliche Themen

  1. Antworten: 2
    Letzter Beitrag: 22.12.2011, 08:57
  2. Frage Return Werte einer Select Funktion
    Von IdaS im Forum PL/pgSQL
    Antworten: 12
    Letzter Beitrag: 19.01.2009, 17:12
  3. Dynamischer Return type?
    Von cevou im Forum PL/pgSQL
    Antworten: 6
    Letzter Beitrag: 25.08.2008, 15:39
  4. C-Interface: Größe des Result aus COPY Cmd
    Von beho im Forum externe Schnittstellen
    Antworten: 0
    Letzter Beitrag: 14.11.2007, 18:00
  5. DataReader positioned beyond end of result set?!
    Von Nils im Forum Programmierung
    Antworten: 0
    Letzter Beitrag: 15.05.2007, 10:18

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •  

Links: Tobias Bauer - IT- und Funkdienstleistungen   -   Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen   -   Funkforum