EXECUTE ... USING
funziona solo in PL/PgSQL - cioè entro funzioni o DO
blocks scritti nel linguaggio PL/pgSQL. Non funziona in SQL semplice; il EXECUTE
in SQL semplice è completamente diverso, per l'esecuzione di istruzioni preparate. Non è possibile utilizzare l'SQL dinamico direttamente nel dialetto SQL di PostgreSQL.
Confronta:
Vedere la 2 ° ultimo pari in my prior answer.
Oltre a non correre se non in PL/pgSQL l'istruzione SQL è sbagliato, non farà quello che vi aspettate. Se i ritorni (select id from ids where condition = some_condition)
indicano 42
, l'istruzione non funzionerà se id
è un numero intero. Se il testo viene trasmesso, ottieni:
EXECUTE format('SELECT * from result_%s_table', quote_ident('42'));
EXECUTE format('SELECT * from result_%s_table', '"42"');
EXECUTE 'SELECT * from result_"42"_table';
Non valido. In realtà vuoi result_42_table
o "result_42_table"
. Dovresti scrivere qualcosa di più simile a:
EXECUTE format('SELECT * from %s', quote_ident('result_'||(select id from ids where condition = some_condition)||'_table'))
... se è necessario utilizzare quote_ident
.
fonte
2012-10-08 10:59:01
Solo per complemento, un blocco 'DO' restituisce sempre vuoto e accetta nessun parametro quindi penso che il PO è limitato a una funzione. –
@Clodoaldo Buon punto: possono eseguire il comando 'SELECT', ma non gli serviranno a nulla a meno che non debbano fare qualcosa di veramente tondo come" SELECT ... INTO' a una tabella temporanea. –
@CraigRinger Ciao, so che sono un po 'in ritardo per la festa, ma puoi suggerirti qualche buon tutorial per SQL dinamico in postgreSQL? Non riesco a trovarne. Voglio creare una query dinamica all-in-one. Consulta [questo] (https://stackoverflow.com/questions/48216935/pl-pgsql-for-all-in-one-dynamic-query) domanda se vuoi. Grazie – slevin