Oracle 11g : cache de résultats (result_cache) pour les fonctions PL/SQL
Romain Ferraton · · mis à jour le 11 mars 2013
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”