IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PL/SQL Oracle Discussion :

Utilité de PRAGMA RESTRICT_REFERENCES


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    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

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre averti
    Inscrit en
    Décembre 2008
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2008
    Messages : 32
    Par défaut
    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).

  4. #4
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    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 : 5 611
    Par défaut
    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.

Discussions similaires

  1. à quoi sert "PRAGMA RESTRICT_REFERENCES"
    Par viktor951 dans le forum Oracle
    Réponses: 2
    Dernier message: 17/12/2012, 16h48
  2. parametrage PRAGMA RESTRICT_REFERENCES
    Par vttvolant dans le forum Oracle
    Réponses: 5
    Dernier message: 01/02/2011, 11h48
  3. Utilité d'un pointeur vers une fonction ?
    Par Nasky dans le forum C
    Réponses: 10
    Dernier message: 20/03/2010, 19h54
  4. Le BIOS et son utilité
    Par le mage tophinus dans le forum Assembleur
    Réponses: 75
    Dernier message: 21/11/2003, 15h37
  5. utilité du binaire et hexadecimaux?
    Par souris78 dans le forum C
    Réponses: 9
    Dernier message: 01/07/2003, 15h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo