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 :

Debutant - Procedure se decompilant tout seul


Sujet :

Oracle

  1. #1
    Membre averti
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Par défaut Debutant - Procedure se decompilant tout seul
    Bonjour,
    je suis debutant, j'ai une base Oracle 817 avec Forms et Reports 6i.
    A chaque fois, g une procedure qui devient invalid et ca bloque d'autres actions. Je voudrai savoir qu'est ce qui peut rendre ma procedure invalid alors que je la compile facilement des que je me rends compte. J 'ai pensé à creer un job qui se lance toutes les 3 heures pour eventuellement recompiler ma procedure, mais avant cela comprendre pourquoi et comment cela peut arriver. une tache planifiee fait des exports de schama toutes les 3 heures et un import chaque vendredi.merci

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Un objet devient invalide parce qu'il y a eu exécution d'une commande DDL sur l'objet en question comme ALTER ou GRANT. A priori, l'export ne peut pas changer le statut d'un objet mais l'import oui.

  3. #3
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    il suffit de recréer un objet utilisé dans le package pour générer ce type de souci

  4. #4
    Membre Expert Avatar de Garuda
    Homme Profil pro
    Chef de projet / Urbaniste SI
    Inscrit en
    Juin 2007
    Messages
    1 285
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Chef de projet / Urbaniste SI
    Secteur : Bâtiment

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 285
    Par défaut
    Citation Envoyé par orafrance
    il suffit de recréer un objet utilisé dans le package pour générer ce type de souci
    Ou même juste de le modifier (procédure, fonction, package, table ou vues !)

  5. #5
    Membre averti
    Inscrit en
    Août 2005
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 26
    Par défaut
    Justement mon iport ne touche aucun object utilisé dans ma procedure.
    S'il vousplait aidez moi à comprendre ce probleme.
    Merci

  6. #6
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    explique nous toutes les étapes de l'import STP. Tu dropes le shéma avant ?

    T'as essayé l'option COMPILE=n ?

  7. #7
    Expert éminent
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Par défaut
    euhhh... j'ai un doute d'un coup... tu parles bien d'un package basé qui devient invalide, pas un package dans une form ?

  8. #8
    Membre Expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Par défaut
    Ce serait vraiment intéressant de savoir si le code en question est une procédure stockée indépendante (qui n'est pas dans un package) ou un procédure dans un package et aussi de savoir quel est véritablement le problème à l'exécution (message d'erreur ?).

    Par défaut, Oracle recompile un objet invalide automatiquement à l'exécution sans générer systématiquement de message d'erreur ou exception. La recompilation d'un package peut poser problème dans le cas d'utilisation de variables globales du package. Est-ce le cas ?

    Exemple de procédure et de package sans variable globale avec Oracle 10.2.0.2:


    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    dev001> 
    dev001> drop table t;
     
    Table dropped.
     
    dev001> drop procedure pi;
     
    Procedure dropped.
     
    dev001> drop package pq;
     
    Package dropped.
     
    dev001> 
    dev001> create table t(x int);
     
    Table created.
     
    dev001> 
    dev001> create procedure pi
      2  is
      3  t number;
      4  begin
      5  for c in(select * from t)
      6  loop
      7   t:= t + c.x;
      8  end loop;
      9  end;
     10  /
     
    Procedure created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> create package pq
      2  is
      3  procedure pq;
      4  end;
      5  /
     
    Package created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> create package body pq
      2  is
      3  procedure pq
      4  is
      5  t number;
      6  begin
      7  for c in(select * from t)
      8  loop
      9   t:= t + c.x;
     10  end loop;
     11  end;
     12  --
     13  end;
     14  /
     
    Package body created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> exec pi;
     
    PL/SQL procedure successfully completed.
     
    dev001> 
    dev001> exec pq.pq;
     
    PL/SQL procedure successfully completed.
     
    dev001> 
    dev001> alter table t add (y int);
     
    Table altered.
     
    dev001> 
    dev001> column object_name format a10;
    dev001> column object_type format a20;
    dev001> select object_name, object_type, status from user_objects
      2  where object_name like 'PI%' or object_name like '%PQ';
     
    OBJECT_NAM OBJECT_TYPE          STATUS                                          
    ---------- -------------------- -------                                         
    PI         PROCEDURE            INVALID                                         
    PQ         PACKAGE              VALID                                           
    PQ         PACKAGE BODY         INVALID                                         
     
    dev001> 
    dev001> exec pi;
     
    PL/SQL procedure successfully completed.
     
    dev001> exec pq.pq;
     
    PL/SQL procedure successfully completed.
     
    dev001> 
    dev001> exit
    Exemple de procédure et de package avec variable globale avec Oracle 10.2.0.2:

    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
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    dev001> 
    dev001> drop table t;
     
    Table dropped.
     
    dev001> drop procedure pi;
     
    Procedure dropped.
     
    dev001> drop package pq;
     
    Package dropped.
     
    dev001> 
    dev001> create table t(x int);
     
    Table created.
     
    dev001> 
    dev001> create procedure pi
      2  is
      3  t number;
      4  begin
      5  for c in(select * from t)
      6  loop
      7   t:= t + c.x;
      8  end loop;
      9  end;
     10  /
     
    Procedure created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> create package pq
      2  is
      3  glo number;
      4  procedure pq;
      5  end;
      6  /
     
    Package created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> create package body pq
      2  is
      3  procedure pq
      4  is
      5  t number;
      6  begin
      7  glo:=2;
      8  for c in(select * from t)
      9  loop
     10   t:= t + c.x;
     11  end loop;
     12  end;
     13  --
     14  end;
     15  /
     
    Package body created.
     
    dev001> show errors
    No errors.
    dev001> 
    dev001> exec pi;
     
    PL/SQL procedure successfully completed.
     
    dev001> 
    dev001> exec pq.pq;
     
    PL/SQL procedure successfully completed.
     
    dev001> 
    dev001> alter table t add (y int);
     
    Table altered.
     
    dev001> 
    dev001> column object_name format a10;
    dev001> column object_type format a20;
    dev001> select object_name, object_type, status from user_objects
      2  where object_name like 'PI%' or object_name like '%PQ';
     
    OBJECT_NAM OBJECT_TYPE          STATUS                                          
    ---------- -------------------- -------                                         
    PI         PROCEDURE            INVALID                                         
    PQ         PACKAGE              VALID                                           
    PQ         PACKAGE BODY         INVALID                                         
     
    dev001> 
    dev001> exec pi;
     
    PL/SQL procedure successfully completed.
     
    dev001> exec pq.pq;
    BEGIN pq.pq; END;
     
    *
    ERROR at line 1:
    ORA-04068: existing state of packages has been discarded 
    ORA-04061: existing state of package body "XXX.PQ" has been invalidated 
    ORA-06508: PL/SQL: could not find program unit being called: 
    "XXX.PQ" 
    ORA-06512: at line 1 
     
     
    dev001> 
    dev001> exit

Discussions similaires

  1. [MSSQL server 2000] stored procedure a demarre toute seule
    Par NorthernLights dans le forum MS SQL Server
    Réponses: 8
    Dernier message: 18/08/2006, 11h10
  2. Mon ordi redemarre tout seul...
    Par le Daoud dans le forum Administration système
    Réponses: 10
    Dernier message: 11/04/2004, 20h08
  3. [Debutant]Procedure stockee sous MSDE
    Par christophebmx dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 08/04/2004, 10h39
  4. TCanvas et handle qui se désalloue tout seul
    Par efourmon dans le forum Langage
    Réponses: 3
    Dernier message: 14/01/2004, 11h07
  5. Réponses: 5
    Dernier message: 11/12/2003, 14h45

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