Domanda

PostgreSQL implementa l'opzione execute ... using per passare i parametri in SQL dinamico, e per quanto posso dire a questa funzione è stata introdotta nella versione 8.4.Usando GreenPlum, che è biforcò da PostgreSQL alla versione 8.2, quindi non ha questa funzione.

C'è qualche altro modo per fare la stessa cosa in GreenPlum o PostgreSQL 8.2?

È stato utile?

Soluzione

Non posso dirlo a certo, ma c'è un suggerimento in CREATE FUNCTION Documentazione:

.

Langname Il nome della lingua in cui viene implementata la funzione. Può essere SQL, C, INTERNAL o il nome di un linguaggio procedurale definito dall'utente. Vedere Crea lingua per le lingue procedurali supportate nel database GreenPlum.

a turno, il posto di riferimento dice

.

La lingua PL / PGSQL è installata per impostazione predefinita nel database GreenPlum.

Ora il EXECUTE ... USING è una funzione PL / PGSQL, quindi l'unica domanda è da quale versione postgreSQL proviene da. La documentazione punta a 8.2 - e in questo modo sembra che tu sia sfortunato.

Ho contattato il supporto GreenPlum per ottenere una risposta definitiva, ma non ho mai ricevuto una risposta.

Per quanto riguarda la lavorazione della mancanza di quel costrutto, è ovviamente possibile concatenare insieme qualsiasi stringa SQL che desideri ed eseguirlo. Fai attenzione a citare correttamente i valori passati ed evitare l'iniezione SQL.

Altri suggerimenti

È possibile utilizzare una soluzione alternativa utilizzando una funzione memorizzata menzionata da Dezso:

CREATE OR REPLACE FUNCTION dynamic_query (table_name TEXT) RETURNS VOID AS $$
BEGIN
    EXECUTE 'SELECT * FROM ' || table_name || ' WHERE column1 LIKE ''a_value''';
END;
$$ language plpgsql;
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a dba.stackexchange
scroll top