Précédent   Forum des professionnels en informatique > Bases de données > Oracle > PL/SQL
PL/SQL Forum d'entraide sur le PL/SQL
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 13/12/2007, 09h17   #1
Invité de passage
 
Inscription : décembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 2
Points : 0
Points : 0
Par défaut Comment tester si une variable est dans une liste de valeurs ?

Bonjour,

pour l'instant, dans le code d'un package PL/SQL, j'ai :
Code :
IF (my_var IN (4,5,8,11,42)) THEN faire qqchose
Je voudrais simplement ne pas avoir cet ensemble codé "en dur" dans ma procédure, mais dans le header du package, avec d'autres variables globales.

Mon code serait alors
Code :
IF (my_var IN (var_list)) THEN faire qqchose
Question : comment on réalise cela ??

PS : j'ai fait
Code :
1
2
TYPE CODE_LIST IS VARRAY (5) OF  NUMBER;
var_list CODE_LIST:= CODE_LIST(4,5,8,11,42)
mais à par parcourir la liste avec une LOOP, je ne vois pas comment faire.

Des suggestions ??
wxcvbnbvcx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 10h00   #2
Rédacteur
 
Inscription : décembre 2002
Messages : 2 397
Détails du profil
Informations personnelles :
Localisation : France, Var (Provence Alpes Côte d'Azur)

Informations forums :
Inscription : décembre 2002
Messages : 2 397
Points : 3 298
Points : 3 298
Bonjour et bienvenue sur le forum !

Merci de prendre l'habitude de mettre un titre significatif à vos questions pour faciliter les recherches ultérieures.

Outre les collections auxquelles vous avez pensé spontanément, peut-être le stockage de votre liste sous forme de simple variable VARCHAR2 est-il judicieux.
En effet, si jamais vous construisez vos requêtes dynamiquement, en vue d'une exécution par EXECUTE IMMEDIATE, il vous suffira de concaténer cette variable avec les autres éléments de la requête, sans vous préoccuper outre-mesure de la décomposition de cette variable.
__________________
Consultant / formateur Oracle indépendant
Certifié OCP 10g et 11g, sécurité 11g
Pomalaix est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2007, 10h14   #3
Invité de passage
 
Inscription : décembre 2007
Messages : 2
Détails du profil
Informations forums :
Inscription : décembre 2007
Messages : 2
Points : 0
Points : 0
Merci,
OK : Titre modifié.

Ce bout de code est utilisé directement dans la logique fonctionnelle de la proc stock: je ne fais pas de requête.

Au départ, je voulais rendre mon code un peu plus propre, je croyais que ça allait me prendre 3 minutes !!
wxcvbnbvcx est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/12/2007, 23h26   #4
Membre éprouvé
 
Inscription : décembre 2007
Messages : 354
Détails du profil
Informations personnelles :
Localisation : France

Informations forums :
Inscription : décembre 2007
Messages : 354
Points : 408
Points : 408
Citation:
Envoyé par wxcvbnbvcx Voir le message
Bonjour,

pour l'instant, dans le code d'un package PL/SQL, j'ai :
Code :
IF (my_var IN (4,5,8,11,42)) THEN faire qqchose
Je voudrais simplement ne pas avoir cet ensemble codé "en dur" dans ma procédure, mais dans le header du package, avec d'autres variables globales.

Mon code serait alors
Code :
IF (my_var IN (var_list)) THEN faire qqchose
Question : comment on réalise cela ??
Voici un exemple comment on réalise ça mais il faut avoir plus d'information afin de juger ...

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
set serveroutput on

declare
  TYPE num_liste IS TABLE OF NUMBER;
  v_liste num_liste;
BEGIN
  v_liste := num_liste(1, 2, 3, 4, 3);
  if 4 MEMBER OF v_liste then
    dbms_output.put_line('oui');
  else
    dbms_output.put_line('non');
  end if;
END;
/
Michel SALAIS est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/12/2007, 14h46   #5
Expert Confirmé Sénior
 
Avatar de mnitu
 
Homme Marius Nitu
Ingénieur développement logiciels
Inscription : octobre 2007
Messages : 3 319
Détails du profil
Informations personnelles :
Nom : Homme Marius Nitu
Localisation : France, Marne (Champagne Ardenne)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : octobre 2007
Messages : 3 319
Points : 5 837
Points : 5 837
Citation:
Envoyé par wxcvbnbvcx Voir le message
...
Mon code serait alors
Code :
IF (my_var IN (var_list)) THEN faire qqchose
...
Difficile à dire si après ce changement le code sera vraiment plus lisible, je trouve mieux de remplacer les valeurs en dur par des constantes (mais c’est une question de goût peut être).
mnitu 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 02h27.


 
 
 
 
Partenaires

Hébergement Web