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 :
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