Newsgroup: it.comp.software.database
Titolo: Postgres select dinamiche

Ho creato una funzione:
CREATE FUNCTION "miafunct" () RETURNS text AS'
DECLARE
 strsql text;
BEGIN
 SELECT INTO per max(colonna)  from stagioni;
 strsql :='''';
 strsql:=''SELECT * from miatabella'';
 RETURN strsql;
END;
'
LANGUAGE 'plpgsql';
Ora io vorrei che il "select miafunct()" mi ritornasse il risultato
della strsql creata. NON CI RIESCO.
Come si fa ad eseguire una stringa creata in una funzione???
Grazie

Dario wrote:

Il tuo esempio non ha molto senso, ad ogni modo
ci sono vari modi uno dei quali e' usare una execute.
Se vuoi che la funzioni torni un result set devi per intanto
usare almeno la versione 7.3.
Spiegati meglio, dicendo anche cosa vuoi fare e ti dico come devi fare.
K.

Dario wrote:

Il tuo esempio non ha molto senso, ad ogni modo


Dario wrote:

Il tuo esempio non ha molto senso, ad ogni modo


 ha scritto nel messaggio
news:3F8C32EE...@bigfoot.com...


Ciao, 
END LOOP;
strsql:=strsql ||'MAX(CASE colonna WHEN '||per||' THEN prezzo ELSE 0 END) ';
strsql:=strsql ||'FROM tabella2 GROUP BY descrizione;'';
RETURN strsql;
EXECUTE strsql;   <-- Secondo me cosi'. ..
END;
Cosi' dovrebbe eseguirti la strsql .. se non va prova anche con PERFORM strsql .. 
Saluti,
Fabrizio Mazzoni


 ha scritto nel messaggio
news:20031014212539.7...@libero.it...


Hai ragione .... errore di battitura mio ... va appena prima del RETURN....
Saluti
Fabrizio Mazzoni


 Cosi' dovrebbe eseguirti la strsql .. se non va prova anche con PERFORM strsql .. 
Cosi' funziona sicuro:
definisci un TIPO T con i campi che devi tornare.
la funzione deve tornare SET OF T
 
dichiari una variabile my_rec di tipo T%rowtype
e poi:
FOR my_rec IN EXECUTE strsql LOOP
	RETURN NEXT my_rec;
END LOOP;
 
Gaetano
PS: Ripeto comunque che stai affrontando il problema ( che non hai 
enunciato ) in modo sbagliato.

 ha scritto nel messaggio
news:3F8C75...@bigfoot.com...


 Non voglio trovare altrernative vorrei realizzare questa cosa.
Non penso sia possibile avere un tipo di ritorno con numero di colonne 
variabile. Con cosa ti interfacci, JDBC ? Ti conviene la stringa fartela 
in JAVA ed eseguirla.
Gaetano

 Non voglio trovare altrernative vorrei realizzare questa cosa.
Non penso sia possibile avere un tipo di ritorno con numero di colonne 


 Non voglio trovare altrernative vorrei realizzare questa cosa.
Non penso sia possibile avere un tipo di ritorno con numero di colonne 


Ok,la soluzione puo' essere questa dunque:
-Creo la mia stringa SQL nella mia funzione "miafunct"
-Dal linguaggio di programmazione memorizzo il risultato della "select
miafunct()"  in una stringa
-Eseguo la stringa ritornata dalla select precedente.
E' un po' macchinoso, ma puo' andare.
Ultime  due cose:
1) le funzioni sono paragonabili alle stored procedure di M$ Sql?
2) le funzioni si chiamano sempre e solo attraverso a clausula select?
Grazie

 2) le funzioni si chiamano sempre e solo attraverso a clausula select?
Dipende.
Dentro una store procedure puoi fare:
	a = foo(...);
	a = select foo(...);
se la store procedure e' in realta' una "Table Function" allora va
trattata come se fosse una vista/tabella:
	select * from foo(...)
G.