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 22/10/2007, 09h47   #1
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Par défaut Clause ASSERT() sous Oracle

Bonjour,

Existe-t-il en PL/SQL un moyen des faire des assertions tel que cela se fait en C++ par exemple ?

Merci pour vos réponses.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 10h38   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 453
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 453
Points : 4 215
Points : 4 215
C'est quoi une assertion ?
__________________
More Code : More Bugs. Less Code : Less Bugs
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 10h49   #3
Yoh
Candidat au titre de Membre du Club
 
Inscription : juillet 2002
Messages : 56
Détails du profil
Informations forums :
Inscription : juillet 2002
Messages : 56
Points : 14
Points : 14
Une assertion, cela revient à tester une condition et, selon le résultat vrai ou faux, interrompre le programme ou bien émettre un signalement.

Par exemple : "assert(var1 = var2);"

Les assertions sont activées la plupart du temps en phase de développement, mais désactivé une fois l'application livrée chez le client (car ça la ralentit).

Cela existe en php, c++, ..., mais je ne connais pas l'équivalent en PL/SQL.
Yoh est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 11h18   #4
Membre actif
 
Avatar de Loyd1974
 
Inscription : août 2007
Messages : 176
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 176
Points : 172
Points : 172
Cela ne me dit rien, mais tu pourrais arriver à un résultat quasi similaire avec la compilation conditionnelle, tu trouveras plus d'info ici
Loyd1974 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/10/2007, 15h30   #5
Rédactrice
 
Avatar de Fleur-Anne.Blain
 
Inscription : juillet 2006
Messages : 2 662
Détails du profil
Informations forums :
Inscription : juillet 2006
Messages : 2 662
Points : 5 590
Points : 5 590
Oui mais en PL/SQL et avec un package de procédure:

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
114
115
116
117
118
119
120
121
122
123
CREATE OR REPLACE PACKAGE assert
IS
   PROCEDURE istrue (
      condition_in IN BOOLEAN,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   );
 
   PROCEDURE isnotnull (
      value_in IN VARCHAR2,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   );
 
   PROCEDURE isnotnull (
      value_in IN DATE,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   );
 
   PROCEDURE isnotnull (
      value_in IN NUMBER,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   );
 
   PROCEDURE isnotnull (
      value_in IN BOOLEAN,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   );
END assert;
/
CREATE OR REPLACE PACKAGE BODY assert
IS
   PROCEDURE istrue (
      condition_in IN BOOLEAN,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   )
   IS
   BEGIN
      IF    NOT condition_in
         OR condition_in IS NULL
      THEN
         pl ('Assertion Failure!');
         pl (message_in);
 
         IF raise_exception_in
         THEN
            EXECUTE IMMEDIATE 'BEGIN RAISE ' || exception_in ||
                                 '; END;';
         END IF;
      END IF;
   END istrue;
 
   PROCEDURE isnotnull (
      value_in IN VARCHAR2,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   )
   IS
   BEGIN
      istrue (value_in IS NOT NULL,
         message_in,
         raise_exception_in,
         exception_in
      );
   END;
 
   PROCEDURE isnotnull (
      value_in IN DATE,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   )
   IS
   BEGIN
      istrue (value_in IS NOT NULL,
         message_in,
         raise_exception_in,
         exception_in
      );
   END;
 
   PROCEDURE isnotnull (
      value_in IN NUMBER,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   )
   IS
   BEGIN
      istrue (value_in IS NOT NULL,
         message_in,
         raise_exception_in,
         exception_in
      );
   END;
 
   PROCEDURE isnotnull (
      value_in IN BOOLEAN,
      message_in IN VARCHAR2,
      raise_exception_in IN BOOLEAN := TRUE,
      exception_in IN VARCHAR2 := 'VALUE_ERROR'
   )
   IS
   BEGIN
      istrue (value_in IS NOT NULL,
         message_in,
         raise_exception_in,
         exception_in
      );
   END;
END assert;
/
__________________
la culture c'est comme la confiture moins on en a plus on l'étale.

Vous souhaitez contribuer aux rubriques Solutions d'entreprises ou BI, contactez-moi

Mes tutos
Fleur-Anne.Blain 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 06h49.


 
 
 
 
Partenaires

Hébergement Web