Istruzioni preparate
In SQL, le istruzioni preparate vengono utilizzate per creare modelli di query o aggiornamenti simili. Adobe Experience Platform Query Service supporta le istruzioni preparate tramite una query con parametri. In questo modo è possibile ottimizzare le prestazioni, poiché non è più necessario ripetere ripetutamente l’analisi di una query.
Utilizzo di istruzioni preparate
Quando si utilizzano le istruzioni preparate, sono supportate le seguenti sintassi:
Prepara un rendiconto preparato prepare
Questa query SQL salva la query SELECT scritta con il nome specificato come PLAN_NAME
. È possibile utilizzare le variabili, ad esempio $1
, al posto dei valori effettivi. L'istruzione preparata verrà salvata durante la sessione corrente. I nomi dei piani sono non con distinzione tra maiuscole e minuscole.
Formato SQL
PREPARE {PLAN_NAME} AS {SELECT_QUERY}
SQL di esempio
PREPARE test AS SELECT * FROM table WHERE country = $1 AND city = $2;
Eseguire un'istruzione preparata execute
Questa query SQL utilizza l'istruzione preparata creata in precedenza.
Formato SQL
EXECUTE {PLAN_NAME}('{PARAMETERS}')
SQL di esempio
EXECUTE test('canada', 'vancouver');
Disallocare un rendiconto preparato deallocate
Questa query SQL viene utilizzata per eliminare l'istruzione preparata denominata.
Formato SQL
DEALLOCATE {PLAN_NAME}
SQL di esempio
DEALLOCATE test;
Flusso di esempio con istruzioni preparate
Inizialmente, è possibile disporre di una query SQL, come quella riportata di seguito:
SELECT * FROM table WHERE id >= 10000 AND id <= 10005;
La query SQL precedente restituirà la seguente risposta:
Questa query SQL può essere parametrizzata utilizzando la seguente istruzione preparata:
PREPARE getIdRange AS SELECT * FROM table WHERE id >= $1 AND id <= $2;
Ora, l’istruzione preparata può essere eseguita utilizzando la seguente chiamata:
EXECUTE getIdRange(10000, 10005);
Quando viene richiamato, vedrai gli stessi risultati di prima:
Dopo aver terminato di utilizzare l'istruzione preparata, è possibile deallocarla utilizzando la chiamata seguente:
DEALLOCATE getIdRange;