plsh set zurückgeben

Fragen, Probleme etc. zu den prozedularen Sprachen ( PL/Tcl, PL/Perl und PL/Python).
Antworten
Pittiplatsch
Neuer Benutzer
Beiträge: 12
Registriert: Sa 5. Mai 2007, 09:27
Wohnort: Leipzig

plsh set zurückgeben

Beitrag von Pittiplatsch » Di 8. Mai 2007, 12:50

Kann man aus einer Funktion in plsh ein set zurückgeben?
Folgendes habe ich versucht:

Code: Alles auswählen

postgres@postgresql ~ $ echo 'abc' >> test.txt
postgres@postgresql ~ $ echo 'efg'>> test.txt


Code: Alles auswählen

CREATE OR REPLACE FUNCTION shtest()
RETURNS setof text AS
$BODY$
#!/bin/sh

cd /var/lib/postgresql
cat test.txt
exit 0

$BODY$
LANGUAGE 'plsh' VOLATILE;


Code: Alles auswählen

db=# select * from shtest();

 shtest
--------
 abc
 efg
(1 Zeile)


Sieht zunächst ganz gut aus, ist aber nur eine Zeile.
Oder anders:

Code: Alles auswählen

db=# create table test (s1 text);
CREATE TABLE
db=# insert into test select * from shtest();
INSERT 0 1
db=# select * from test;
 s1
-----
 abc
 efg
(1 Zeile)


Ich hätte aber gern eine Tabellenzeile pro Dateizeile.

akretschmer
Erfahrener Benutzer
Beiträge: 7681
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer » Di 8. Mai 2007, 14:06

Pittiplatsch hat geschrieben:Kann man aus einer Funktion in plsh ein set zurückgeben?
Ich hätte aber gern eine Tabellenzeile pro Dateizeile.


Vermutlich nicht, es nimmt das, was die Shell rückliefert, als einen Antwort-Text auf.

Aber Dir kann geholfen werden: zerteile den Text an den Zeilenenden, diese URL hier könnte Dir hilfreich sein:

http://archives.postgresql.org/pgsql-general/2005-12/msg00080.php



Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Pittiplatsch
Neuer Benutzer
Beiträge: 12
Registriert: Sa 5. Mai 2007, 09:27
Wohnort: Leipzig

Beitrag von Pittiplatsch » Di 8. Mai 2007, 15:35

Coole Sache das, danke.

Nun noch eine Frage:
Wie kann ich jetzt die Rückgabe von shtest() an Parameter 1 von split_to_row(text,text) übergeben ohne es in eine weitere Prozedur zu packen?

Ich komme ja von MSSQL und da deklariert man am Anfang eines Scripes oder Batches ein paar Variablen, über welche man dann die Werte übergibt oder auch verändert. Aber in Postgres kann man Variablen wohl nur in Funktionen verwenden.

Mit dem Umschreiben einiger Funktionen von MSSQL nach Postgres bin ich schon recht gut vorwärts gekommen. Aber was reine Scripte betrifft (welche ich recht häufig für Administration, Reporting usw. benutze), da habe ich generell noch das Problem wie man die Ergebnisse eines Schrittes in an den nächsten übergibt. Vielleicht könnt ihr mir hier mal auf den Sprung helfen.

akretschmer
Erfahrener Benutzer
Beiträge: 7681
Registriert: So 29. Okt 2006, 13:35
Wohnort: Kaufbach, Sachsen, Germany, Germany
Kontaktdaten:

Beitrag von akretschmer » Di 8. Mai 2007, 16:15

Pittiplatsch hat geschrieben:Coole Sache das, danke.

Nun noch eine Frage:
Wie kann ich jetzt die Rückgabe von shtest() an Parameter 1 von split_to_row(text,text) übergeben ohne es in eine weitere Prozedur zu packen?



ungetestet:

select split_to_row(shtext(), text);

einfach einsetzen...


Andreas
PostgreSQL Development, 24x7 Support, Remote DBA, Training & Services

Antworten