Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
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 14/08/2007, 10h30   #1
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 25
Points : 10
Points : 10
Envoyer un message via MSN à sanomory Envoyer un message via Yahoo à sanomory
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
sanomory est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 10h43   #2
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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.
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 10h45   #3
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
il suffit de recréer un objet utilisé dans le package pour générer ce type de souci
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 10h50   #4
Membre Expert
 
Avatar de Garuda
 
Homme Philippe CHIRCOP
Chef de projet
Inscription : juin 2007
Messages : 1 109
Détails du profil
Informations personnelles :
Nom : Homme Philippe CHIRCOP
Localisation : France

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

Informations forums :
Inscription : juin 2007
Messages : 1 109
Points : 1 559
Points : 1 559
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 !)
__________________
Garuda गरूड
Brahmâ la Guerre et Vishnu la Paix

Oracle 10.2.0.4 - Forms6i patch 17 - Toad 11.1 - sharePoint 2010
Garuda est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 13h20   #5
Candidat au titre de Membre du Club
 
Inscription : août 2005
Messages : 25
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 25
Points : 10
Points : 10
Envoyer un message via MSN à sanomory Envoyer un message via Yahoo à sanomory
Justement mon iport ne touche aucun object utilisé dans ma procedure.
S'il vousplait aidez moi à comprendre ce probleme.
Merci
sanomory est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 13h24   #6
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
explique nous toutes les étapes de l'import STP. Tu dropes le shéma avant ?

T'as essayé l'option COMPILE=n ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 13h28   #7
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
euhhh... j'ai un doute d'un coup... tu parles bien d'un package basé qui devient invalide, pas un package dans une form ?
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2007, 13h49   #8
Expert Confirmé
 
Inscription : février 2006
Messages : 3 433
Détails du profil
Informations forums :
Inscription : février 2006
Messages : 3 433
Points : 3 462
Points : 3 462
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 :
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 :
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
__________________
P. Forstmann

AskTom Forums OTN doc 8, 9, 10 et 11
pifor 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 04h35.


 
 
 
 
Partenaires

Hébergement Web