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

Oracle Discussion :

PlSql comment tester si une procédure est wappée ?


Sujet :

Oracle

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut PlSql comment tester si une procédure est wappée ?
    Bonjour,

    J'utilise le wrappeur d'Oracle pour crypter mon PlSql.
    Aujourd'hui je cherche à déterminer par programmation si un package est wrappé ou non.

    Je n'ai pas trouvé dans le dictionnaire Oracle de champ indiquant si un code est wrappé ou pas.

    Est-ce que quelqu'un sait s'il en existe un ?
    Dans le cas contraire une idée sur comment je pourrais procéder siouplé ?

    Par exemple en 10.2.0.3 standard edition.

    Pozzo

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut Examiner le début du code source dans user_source
    Bon. Une solution bien bricole-bricole comme on les aime.

    Considérant que le code source commence toujours par
    Type Body XXXX wrapped
    On peut examiner le code de la pemière ligne et détecter si on a WRAPPED au bon endroit.

    Exemple de réalisation :
    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
     
      Function est_crypte
      (
        ps_type In Varchar2, -- Type du code PlSql à examiner (PACKAGE BODY, TYPE BODY)
        ps_nom  In Varchar2  -- Nom du code PlSql à examiner
      ) Return Boolean Is
        -- Declare
        ls_chaine Varchar2(7);
        -- Lecture du source
        Cursor c_source(pcs_type In Varchar2, pcs_nom In Varchar2) Is
          Select upper(substr(text,
                              length(Type) + 3 + length(Name),
                              7))
            From user_source
           Where Type = pcs_type
             And Name = pcs_nom
             And line = 1;
      Begin
        Open c_source(upper(ps_type),
                      upper(ps_nom));
        Fetch c_source
          Into ls_chaine;
        Close c_source;
        --
        Return ls_chaine = 'WRAPPED';
      Exception
        When Others Then
          If c_source%Isopen Then
            Close c_source;
          End If;
          --
          Raise;
      End est_crypte;
    Si quelqu'un a plus propre je suis preneur...

    Pozzo

  3. #3
    Membre habitué Avatar de Laurent_du_78
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    138
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France, Yvelines (Île de France)

    Informations forums :
    Inscription : Juin 2007
    Messages : 138
    Points : 188
    Points
    188
    Par défaut
    Un code wrapped ne contient qu'une seule ligne dans dba_source.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select ds.lignes, dba.*
      from (select name, count(*) as lignes 
              from dba_source 
              group by name) ds,
           dba_source dba
     where ds.lignes = 1
       and dba.name = ds.name
    Amicalement
    24h-en-piste.com

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Février 2007
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 260
    Points : 281
    Points
    281
    Par défaut
    Merci Laurent,

    C'est cependant inexact car il peut y avoir plusieurs lignes dans la user_source pour un package wrappé.

    Par exemple pour les packages connecté sys DBMS_AQ est wrappé mais sort avec deux lignes.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Select Type, Name, Count(*)
      From user_source
     Where Type = 'PACKAGE BODY'
     Group By Type, Name
    Having Count(*) > 1

    Pozzo

Discussions similaires

  1. comment tester si une URI est valide
    Par root76 dans le forum Langage
    Réponses: 2
    Dernier message: 29/02/2008, 08h16
  2. Réponses: 4
    Dernier message: 17/12/2007, 14h46
  3. Comment tester qu'une base est bien présente?
    Par xilay dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 20/10/2005, 16h26
  4. comment tester si une variable est de type indifined
    Par amelhog dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 10/08/2005, 09h32
  5. [langage] Comment tester si une chaine est vide
    Par |Bio dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2005, 15h05

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