A partir de la version 11g d'Oracle, il est possible d'avoir un cache de fonction PL/SQL inter-session. Ce cache s'appuie sur la fonctionnalité de result_cache décrite dans un autre article. La SGA est utilisée pour stocker le résultat de la fonction PL/SQL.
la clause RESULT_CACHE dans la déclaration de la fonction indique à Oracle que la fonction peut utiliser le cache de résultat. La clause optionnelle RELIES_ON permet de spécifier quelle(s) table(s) influence le cache de résultat de la fonction. Si une ou plus des tables en "relies_on" est modifiée (DML/DDL), le cache est invalidé.
Si le système à besoin de mémoire il peut invalidé les caches les plus anciens.
PL/SQL Cache de Fonction | |
1 2 3 4 5 6 7 8 9 10 11 12 |
CREATE OR REPLACE FUNCTION GetChangeRate(i_SrcCurrId, i_TgtCurrId, i_RefDate) RETURN NUMBER RESULT_CACHE RELIES_ON (TransCurrenciesDate) IS result NUMBER BEGIN SELECT Change_Rate INTO result FROM TransCurrenciesDate WHERE SrcCurrId = i_SrcCurrId AND TgtCurrId=i_TgtCurrId AND RefDate = i_RefDate; RETURN RESULT; END; |
Restrictions
Le cache de résultat pour les fonctions PL/SQL ne peut être utilisé dans les cas suivants:
- La fonction possède des paramètres OUT
- La fonction possède des paramètres IN de type LOB (CLOB, BLOB,NCLOB) ou REF CURSOR, une collection, objet ou enregistrement
- La fonction retourne un LOB, un REF CURSOR, une collection, un objet ou enregistrement.
- La fonction ne peut donc pas être une fonction "pipelined"