ich würde gerne eine perl-funktion schreiben, die mehr als eine zeile zurückliefert.
bringt nur:Code:CREATE OR REPLACE FUNCTION test() RETURNS SETOF text AS $$ return_next("bla"); return_next("fasel"); return_next("hurz"); return undef; $$ LANGUAGE plperl
ERROR: set-valued function called in context that cannot accept a set
SQL Status:0A000
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Database Access from PL/Perl ist mir bekannt, aber offenbar bin ich zu doof.
tom
ich habs gefunden.
nicht, sondernCode:select test();.Code:select * from test()
hrgh.
So mal wieder hier Spinnweben weg machen.
Habe auch gerade das gleich problem werde aber nicht schlau daraus was du gepostet hast.
Mein Ziel ist, den kompletten Inhalt angezeigt zu bekommen, wenn ich die Methode test() aufrufe.Code:CREATE OR REPLACE FUNCTION test() RETURNS integer AS $BODY$ declare v_t integer; begin select * into v_t from track; return v_t ; end; $BODY$ LANGUAGE 'plpgsql' VOLATILE; ALTER FUNCTION test() OWNER TO postgres;
Abfrage: select * from test();
Ergebnis: Z1 Sp1 Bu1 => 12
Abfrage: select * from track;
Ergebnis: Z1 Sp20 Bu20 => ...
Was muss ich der Funktion ändern damit ich alles zurück bekomme!?
Er hat mit einer SRF gespielt und diese flasch aufgerufen.
Das ist schon mal bullshit. Deine Variable ist geeignet, einen INT zu speichern. Einen, wohlgemerkt. Deine Abfrage versucht, ein ganze Tabelle (besteht aus Zeilen und Spalten) in diese Variable zu packen. Das kann nicht gehen.
[code]
CREATE OR REPLACE FUNCTION test()
RETURNS integer AS
$BODY$
declare
v_t integer;
begin
select * into v_t from track;
return v_t ;
end;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION test() OWNER TO postgres;
//code]
Lesen. Und zwar PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Query Language (SQL) FunctionsMein Ziel ist, den kompletten Inhalt angezeigt zu bekommen, wenn ich die Methode test() aufrufe.
Abfrage: select * from test();
Ergebnis: Z1 Sp1 Bu1 => 12
Abfrage: select * from track;
Ergebnis: Z1 Sp20 Bu20 => ...
Was muss ich der Funktion ändern damit ich alles zurück bekomme!?
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Mit integer ist klar das kann nicht gehen.
So habe ich aber immer hin ein Ergebnis bekommen.
Desweiteren habe ich auf dieser Seite nach geschaut wo ich so erst mal nix gefunden hatte.
Code:test=# create table foo (id int, info text); CREATE TABLE test=*# insert into foo values (1, 'read'); INSERT 0 1 test=*# insert into foo values (2, 'the'); INSERT 0 1 test=*# insert into foo values (3, 'manual'); INSERT 0 1 test=*# create or replace function foo_srf(out i int, out t text) returns setof record as $$declare r record; begin for r in select id, info from foo loop i:=r.id; t:=r.info; return next; end loop; end; $$language plpgsql; CREATE FUNCTION test=*# select * from foo_srf(); i | t ---+-------- 1 | read 2 | the 3 | manual (3 rows)
PostgreSQL: Documentation: Manuals: PostgreSQL 8.3: Control Structures
38.6.1.2. RETURN NEXT and RETURN QUERY
Andreas
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
Abfrage: select * from test();Code:-- Function: test() DROP FUNCTION test(); CREATE FUNCTION test() RETURNS SETOF track AS $$ SELECT * FROM track; $$ LANGUAGE SQL;
Ergebnis: ist gleich wie select * from track();
--
https://www.xing.com/profile/Andreas_Kretschmer7ads Das hatte dir akretschmer gestern schon gesagt und siehe da sobald du das machst, funktioniert es ;-)
NOEP!!!!
Aus deinem Post werde ich auch nicht schlau!! Geht das nur mit einer For schleife!?? Warum die Inputs!? Was ist wenn die Tabellen Größe nicht bekannt ist!?
und das Manuel lese ich. Und wenn ich nix ralle dann frage ich!!!
Kann man nicht einfach das was man Anfragt zurück geben lassen ohne ein For schleife darum zu bauen!?
Problem ich kenne die Ergebnis Größe nicht.
Du solltest Dich vielleicht erst einmal auf eine Sprache festlegen. Der Thread handelt von plperl, Du verwendest mal plpgsql und mal reines sql.
Zu Deiner Frage: natürlich:
AndreasCode:test=# create table foo as select * from generate_Series(1,4); SELECT test=# create or replace function get_foo() returns setof record as $$ select * from foo; $$language sql; CREATE FUNCTION test=# select * from get_foo() as (i int); i --- 1 2 3 4 (4 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