Vote utilisateur: 4 / 5

Etoiles activesEtoiles activesEtoiles activesEtoiles activesEtoiles inactives
 

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"