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 :

DBMS_ADVANCED_REWRITE ne marche pas


Sujet :

PL/SQL Oracle

  1. #1
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut DBMS_ADVANCED_REWRITE ne marche pas
    Salut,

    J'essaye d'utiliser le package DBMS_ADVANCED_REWRITE mais impossible de le faire fonctionner.
    Pour rappel, ce package permet d'intercepter un ordre SQL et de le remplacer par un autre. Par exemple si quelqu'un s'amuse à rechercher le nom des employés gagnant plus de 100 000€, je veux lui afficher le message "Requête interdite!".

    Je travaille sur une édition Entreprise.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select banner from v$version;
    BANNER
    --------------------------------------------------------------------------------
    Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
    PL/SQL Release 11.2.0.1.0 - Production
    CORE    11.2.0.1.0      Production
    TNS for 64-bit Windows: Version 11.2.0.1.0 - Production
    NLSRTL Version 11.2.0.1.0 - Production
    J'ai donné au user HR les droits suivants.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> GRANT EXECUTE ON DBMS_ADVANCED_REWRITE to HR;
    Autorisation de privilèges (GRANT) acceptée.
     
    SQL> GRANT CREATE MATERIALIZED VIEW to HR;
    Autorisation de privilèges (GRANT) acceptée.
    Je me connecte comme HR et modifie ma session.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> connect HR
    Entrez le mot de passe :
    Connecté.
    SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
    Session modifiée.
    Les paramètres semblent bien modifiés.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL> show parameter rewrite
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    query_rewrite_enabled                string      TRUE
    query_rewrite_integrity              string      TRUSTED
    Je lance mon ordre SQL à remplacer puis je crée la requête équivalente qui doit remplacer la requête précédente.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    SQL> select name from emp;
    NAME
    --------------------------------------------------
    DUBOIS
    RUBIS
    DUPONT
    DUPAINT
    RUPRAT
     
    SQL> exec sys.dbms_advanced_rewrite.declare_rewrite_equivalence( 'new_query',  'select name from emp',  'select ''Forget it!'' from emp',   false);
    Procédure PL/SQL terminée avec succès.
    Et c'est le drame, quand je relance ma requête, celle-ci n'est pas remplacée...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SQL> select name from emp;
    NAME
    --------------------------------------------------
    DUBOIS
    RUBIS
    DUPONT
    DUPAINT
    RUPRAT
    Le résultat devrait être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SQL> select name from emp;
    NAME
    --------------------
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Si vous savez pourquoi ça plante, j'attends vos remarques :-)
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  2. #2
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Ca marche chez moi.

  3. #3
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    Et zut!!!!!

    Alors là, comment chercher où peut être l'erreur?
    Si encore j'avais un message d'erreur mais non, rien...

    Mnitu, est-ce qu'il existe une table ou un log concernant le process de rewrite, que je pourrais consulter et voir pourquoi ce rewrite ne se fait pas?
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  4. #4
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Voilà mon test:
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
     
    Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 
     
    SQL> select ename from emp;
    ENAME
    ----------
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
    JAMES
    FORD
    MILLER
    14 rows selected
     
    SQL> exec sys.dbms_advanced_rewrite.declare_rewrite_equivalence( 'new_query',  'select ename from emp',  'select ''Forget it!'' from emp',   false);
    PL/SQL procedure successfully completed
     
    SQL> select ename from emp;
    ENAME
    ----------
    SMITH
    ALLEN
    WARD
    JONES
    MARTIN
    BLAKE
    CLARK
    SCOTT
    KING
    TURNER
    ADAMS
    JAMES
    FORD
    MILLER
    14 rows selected
     
    SQL> ALTER SESSION SET QUERY_REWRITE_INTEGRITY = TRUSTED;
    Session altered
     
    SQL> select ename from emp;
    ENAME
    ----------
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    Forget it!
    14 rows selected
     
    SQL>

  5. #5
    Membre émérite
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Avril 2013
    Messages
    1 993
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2013
    Messages : 1 993
    Points : 2 499
    Points
    2 499
    Par défaut
    mnitu,

    Peux-tu me dire quels sont les droits que tu as donné, si c'est SYS qui les a donné, et quelles sont les valeurs de tes paramètres REWRITE?
    Par avance merci car je pense que l'erreur vient de la configuration de ma base.
    DBA Oracle
    Rédacteur du blog : dbaoraclesql.canalblog.com

  6. #6
    Expert éminent sénior 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
    Points : 11 252
    Points
    11 252
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    query_rewrite_enabled                string      TRUE
    query_rewrite_integrity              string      enforced
    Niveau droits ce juste ce que vous avez posté. Je travaille avec un user qui a reçu le rôle DBA.

Discussions similaires

  1. 'SHOW TABLES' marche pas sous postgresql !?
    Par fet dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 13/05/2004, 09h28
  2. Maximiser fenêtre ne marche pas
    Par sandrinec dans le forum Composants VCL
    Réponses: 2
    Dernier message: 12/06/2003, 12h02
  3. Réponses: 9
    Dernier message: 07/05/2003, 12h57
  4. [GifDecoder] marche pas dans applet avec IE
    Par formentor dans le forum Applets
    Réponses: 2
    Dernier message: 06/05/2003, 10h43
  5. Sysdate qui marche pas ??
    Par StouffR dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/08/2002, 13h23

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