Dynamic query in Firebird “execute statement”
Nella versione 1.5 di Firebird è stato introdotto il predicato “Execute statement” che permette di eseguire una query contenuta in una stringa di testo.
Oltre a poter eseguire delle query è possibile ottenere un result set di dati, questo ci consente di avere query sorgenti diverse per lo stesso set di dati in output.
Anche se a prima vista può sembrare una pratica inutile, nella realtà (sepcialmente se viene innestata in stored procedure) permette di creare comportamenti diversi in store e trigger in funzione di parametri o nel caso di mappature di importazioni massive gestire dinamicamente la mappatura dei campi.
La documentazione completa e ufficiale del predicato è disponibile al seguente link : http://www.firebirdsql.org/refdocs/langrefupd15-psql-execstat.html#langrefupd15-psql-execstat-multirow
Ad esempio in una stored possiamo utilizzare la seguente sintassi :
1 2 3 4 5 6 7 8 9 |
CREATE PROCEDURE TEST_DYNAMIC RETURNS ( PK_OUT timestamp) AS begin /* Procedure Text */ for EXECUTE STATEMENT 'select cast(''now'' as timestamp) from rdb$database' into pk_out do suspend; end |