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 30/01/2008, 16h46   #1
Membre à l'essai
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 59
Points : 24
Points : 24
Par défaut Ameliorer logique pour tester un param

J'ai une procédure qui a une dizaine de paramètres en input. Je voudrais simplement vérifier que si le premier paramètre est rempli, les autres doivent être obligatoirement NULL sinon je RAISE une EXCEPTION.

Y a-t-il un moyen de faire cela simplement ?

Autrement que ci-dessous :

Code :
1
2
3
4
5
6
7
 
IF P_PARAM1 IS NOT NULL THEN
 
  IF P_PARAM2 IS NOT NULL THEN RAISE ...
  IF P_PARAM3 IS NOT NULL THEN RAISE ...
 
...
Ujitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 18h02   #2
Expert Oracle confirmé

 
Homme Gilles ROUARD
Administrateur de base de données
Inscription : mars 2003
Messages : 220
Détails du profil
Informations personnelles :
Nom : Homme Gilles ROUARD
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Administrateur de base de données
Secteur : Conseil

Informations forums :
Inscription : mars 2003
Messages : 220
Points : 322
Points : 322
Bonjour,

Pour ma part, j'utiliserais COALESCE qui est une fonction SQL (à partir de la 9i il me semble).

COALESCE prend en entrée une liste de paramètres, et retourne le 1er paramètre qui n'est pas NULL. Cette fonction retourne NULL si tous les paramètres sont NULL.

Voici une procédure PL/SQL dont vous pouvez vous inspirer.

Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE procedure test_param (p1 IN number, p2 IN number, p3 IN number, p4 IN number) IS
begin
  IF p1 IS NOT NULL AND coalesce (p2, p3, p4) IS NOT NULL then
    dbms_output.put_line ('Ko') ;
  else
    dbms_output.put_line ('Ok') ;
  end IF ;  
end ;
/
Et pour tester :

Citation:
exec test_param (null, 1, 2, 3) ;
exec test_param (1, 2, 3, 4) ;
exec test_param (1, null, 3, 4) ;
exec test_param (1, null, null, 4) ;
exec test_param (1, null, null, null) ;
rouardg est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 18h14   #3
Membre à l'essai
 
Inscription : mars 2007
Messages : 59
Détails du profil
Informations forums :
Inscription : mars 2007
Messages : 59
Points : 24
Points : 24
Oui, ça a l'air d'être ça effectivement, merci. Dommage que je suis en 8i
Ujitsu est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/01/2008, 18h22   #4
Expert Confirmé
 
Homme
Chef de projet en SSII
Inscription : janvier 2004
Messages : 2 866
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Loire Atlantique (Pays de la Loire)

Informations professionnelles :
Activité : Chef de projet en SSII
Secteur : Conseil

Informations forums :
Inscription : janvier 2004
Messages : 2 866
Points : 3 448
Points : 3 448
Dans ce cas, tu peux toujours faire un enchainement de nvl ce qui revient COALESCE :
Code :
1
2
3
4
5
6
7
8
9
CREATE OR REPLACE procedure test_param (p1 IN number, p2 IN number, p3 IN number, p4 IN number) IS
begin
  IF p1 IS NOT NULL AND nvl(p2, nvl(p3, p4)) IS NOT NULL then
    dbms_output.put_line ('Ko') ;
  else
    dbms_output.put_line ('Ok') ;
  end IF ;  
end ;
/
Citation:
Envoyé par Ujitsu Voir le message
Oui, ça a l'air d'être ça effectivement, merci. Dommage que je suis en 8i
D'où l'intérêt de toujours penser à préciser sa version d'oracle
__________________
Un problème sans solution est un problème mal posé

Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.
plaineR est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h18.


 
 
 
 
Partenaires

Hébergement Web