Hallo Zusammen
Mit Hilfe von pg_trgm möchte ich mehrere Einträge aus einer Tabelle exportieren.
Und zwar mit der similiarity Funktion.
In etwa so hab ich mir das Vorgestellt:
-- similiarity Werte
sim_minimum_strasse := 0.45;
Perform set_limit(sim_minimum_strasse);
SELECT INTO rec street, similarity(norm.strasse, street) AS sim
FROM address WHERE
street % norm.strasse
ORDER BY sim DESC;
Diese Abfrage sollte in vielen Fällen mehrere Ergebnisse liefern.
Frage:
Wie kann man all die Ergebniszeilen in einem Output abspeichern?
Ist dies nur über eine Tabelle möglich?
Beispiel Ergebnis:
street sim
Teststrasse 1
Teststrase 0.5
etc.
Gruss
Problem gelöst
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ja ich dachte ich hätte das Problem gelöst.
Doch nun steh ich wieder am Anfang und komm nicht weiter.
Irgendwie müsste das doch mit record funktionieren!!!
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
So in etwa möchte ich das bewerkstelligen:
CREATE OR REPLACE FUNCTION tm_match("input" character varying)
RETURNS setof records AS
$BODY$
DECLARE
rec record
Begin
PERFORM set_limit(sim_minimum_country);
SELECT INTO rec DISTINCT country AS VARCHAR, similarity(norm.Land, country) AS sim
FROM address
WHERE
country % norm.Ort
ORDER BY sim DESC;
Die Frage ist nur, wie ich es hinbekomme dass er mir alle Ergebnisse in rec speichert.
Brauch ich dafür eine Loop und dann mit RETURN NEXT rec?
Oder versteh ich da was falsch?
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Ich hab es mal auf diese Weise versucht:
FOR rec IN SELECT street FROM address WHERE street = norm.strasse LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
Die Abfrage wird durchgeführt, doch bei RETURN NEXT rec kommt folgende Fehlermeldung:
FEHLER: Funktion mit Mengenergebnis in einem Zusammenhang aufgerufen, der keine Mengenergebnisse verarbeiten kann.
Verste ich irgendwie nicht ganz.
In was für einem Zusammenhang ruftst das denn auf? Vermutlich nicht als select * from my_srf(), oder?
Andreas, der grade merkt, daß 8.4 da nicht meckert ...
das war 8.1.Code:test=*> create table foo (a int); CREATE TABLE test=*> copy foo from stdin; Enter data to be copied followed by a newline. End with a backslash and a period on a line by itself. >> 4 >> 5 >> 6 >> \. test=*> create or replace function get_foo(out x int, out y int) returns setof record as $$declare r record; begin for r in select a from foo loop x:=r.a; y:= r.a * 10; return next; end loop; end; $$language plpgsql; CREATE FUNCTION test=*> select get_foo(); ERROR: set-valued function called in context that cannot accept a set CONTEXT: PL/pgSQL function "get_foo" line 1 at return next test=!>
versus 8.4:
Code:test=*# select * from foo; a --- 4 5 6 (3 rows) test=*# select get_foo(); get_foo --------- (4,40) (5,50) (6,60) (3 rows)
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Links: Tobias Bauer - IT- und Funkdienstleistungen - Bilderrahmen-kaufen.de - Der Onlineshop für Bilderrahmen & Fotorahmen - Funkforum
Lesezeichen