Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/02/2011, 01h02   #1
Invité de passage
 
Inscription : décembre 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 27
Points : 1
Points : 1
Par défaut Utilité de PRAGMA RESTRICT_REFERENCES

Bonjour à tous,

est ce que quelqu'un pourrais me dire à quoi sert l'utilisation de PRAGMA RESTRICT_REFERENCES pour les fonctions qui seront appelées à partir d'un ordre SQL.
les 4 niveaux de pureté sont clairs :
RNDS (Reads no database state)
RNPS(Reads no package state)
WNDS(Writes no database state)
WNPS(Writes no package state)

mais réellement je ne vois pas ce que peux causer un appel de fonction à partir d'un ordre SQL (je ne crois pas qu'il y aura une modification sur la base !!).

ça serais super sympa si quelqu'un peut m'aider à comprendre avec un petit exemple illustratif

Merci bien
dydo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/02/2011, 10h19   #2
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Une fonction SQL est soumise à certain restrictions et dans les versions d’Oracle antérieurs à la version 8i.1.5 cella ce faisait avec l’aide de la pragma restrict références. Ce modèle permettait de vérifier à la compilation de la fonction son niveau de pureté.
Voilà un exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
 
Connected TO Oracle DATABASE 10g Enterprise Edition Release 10.2.0.4.0 
Connected AS mni
 
SQL> 
SQL> CREATE OR REPLACE package pk_pure IS
  2    FUNCTION f_pure(p_in varchar2) RETURN Varchar2;
  3    PRAGMA RESTRICT_REFERENCES  (f_pure, WNDS, WNPS, RNDS, RNPS);
  4  end;
  5  /
 
Package created
 
SQL> 
SQL> CREATE OR REPLACE Package Body pk_pure IS
  2    FUNCTION f_pure(p_in varchar2) RETURN Varchar2
  3    IS
  4    Begin
  5      RETURN upper(p_in);
  6    End;
  7    --
  8  End;
  9  /
 
Package body created
En examinant la fonction f_pure vous pouvez constater qu’elle respecte ses promesses : pas de lecture/écriture de la base ou des variables du package.
Regardez ce qui se passe quand on change légèrement la définition de la fonction de la manière suivante
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
 
SQL> CREATE OR REPLACE Package Body pk_pure IS
  2    FUNCTION f_pure(p_in varchar2) RETURN Varchar2
  3    IS
  4    l_var    Varchar2(100);
  5    Begin
  6      SELECT Upper(p_in)
  7        INTO l_var
  8        FROM dual;
  9      --
 10      RETURN l_var;
 11    End;
 12    --
 13  End;
 14  /
 
Warning: Package body created WITH compilation errors
 
SQL> SHOW errors
Errors FOR PACKAGE BODY MNI.PK_PURE:
 
LINE/COL ERROR
-------- --------------------------------------------------------------
2/3      PLS-00452: le sous-programme 'F_PURE' viole son PRAGMA associé
 
SQL>
Petit remarque : cette Pragma existe seulement pour ancien compatibilité, elle n’est plus à utiliser dans le nouveau code.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 02/02/2011, 09h18   #3
Invité de passage
 
Inscription : décembre 2008
Messages : 27
Détails du profil
Informations forums :
Inscription : décembre 2008
Messages : 27
Points : 1
Points : 1
Merci bien mnitu pour votre réponse

Il s'agit donc d'une simple vérification au moment de la compilation (c'est comme une définition de contrainte).
dydo01 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/02/2011, 10h04   #4
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 311
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 311
Points : 5 808
Points : 5 808
Citation:
Envoyé par dydo01 Voir le message
...Il s'agit donc d'une simple vérification au moment de la compilation (c'est comme une définition de contrainte).
Attention, cela ne veut pas dire qu’une fonction SQL peut faire n’importe quoi. Des restrictions existent toujours. Mais au lieu de contrôler au niveau de la compilation le contrôle se fait maintenant à l’exécution.
mnitu est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h57.


 
 
 
 
Partenaires

Hébergement Web