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

PL/SQL Oracle Discussion :

Question de débutant sur les curseurs implicites avec select 'variable'


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut Question de débutant sur les curseurs implicites avec select 'variable'
    Bonjour à tous,

    je début en PL/SQL (cours au CNAM).

    pour un exo, on nous demande de réaliser une procédure socké avec 3 entrées avec la possibilités de ne pas indiqué 2 paramètre sur les trois(NULL). cette fonction doit retourner à l'écran un liste en fonction des entrées indiqué :
    ex : .

    je bute sur la réalisation du select du curseur.
    pour le moment la seul solution que je voie est d'utiliser un curseur par type select possible (en changeant à chaque fois la close WHERE). ça marche mais 'c'est moche...'

    est 'il possible d'intégrer select avec condition?

    j'ai essayé de passer par un champ texte mais je n'arrive pas à le passer en paramètre dans mon cursor...

    quelqu'un peu m'orienter dans mon exo pour réaliser un truc convenable ?

    Merci d'avance.

  2. #2
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Dans ta requête, utilise NVL sur les paramètres NULL

  3. #3
    Membre Expert Avatar de ojo77
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Décembre 2010
    Messages
    680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 680
    Par défaut
    Ce genre de chose ?

    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
    SQL> create or replace function f (p1 in varchar2, p2 in varchar2 default null ) return varchar2 is
      2   ttext varchar2(32767);
      3  begin
      4   for c in (select *
      5             from dba_objects
      6             where object_name=p1
      7               and owner=nvl(p2,'SYS') )
      8   loop
      9     ttext:=c.owner||'.'||c.object_name||' ID =>'||to_char(c.object_id) ;
     10   end loop;
     11   return ttext;
     12  end f;
     13  /
     
    Fonction crÚÚe.
     
    SQL>
    SQL> select f(SEGMENT_NAME) from user_segments where rownum <3;
     
    F(SEGMENT_NAME)
    --------------------------------------------------------------------------------
    SYS.CON$ ID =>28
    SYS.UNDO$ ID =>15

  4. #4
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Pas tous à fait,

    dans ton exemple ojo77 la ligne 7 pourrai être dupliquer et non remplacer une valeurs. a moins qu'il existe une valeurs magique : "prendre toutes les valeurs".

    pour reprendre mon exemple via un champs texte, mon idée était de faire un algo de ce type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    req = "Select * from employe where "
    si parametre1 non null alors 
       req = req + " service = " + parametre1
    fin si
    si parametre2 non null alors 
       req = req + " AND " + " sexe = " + parametre2
    fin si
    si parametre3 non null alors 
       req = req + " AND " +  " lieu = " + parametre3
    fin si
    ensuite passer req en paramètre de mon cursor.

    sa doit être plus compréhensible comme ça.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 953
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 953
    Par défaut
    Regarde Making a genric search sql Query pour la méthode la plus appropriée (décrite dans le PDF).

    Peut être un peu complexe d'approche pour un débutant surtout si l'anglais te pose problème, mais autant apprendre tout de suite à faire les choses correctements.

  6. #6
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    C'est plutôt ça (Attention ne marche que si owner is not null):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT *
    FROM dba_objects
    WHERE object_name=p1
    AND owner=nvl(p2,owner)

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    84
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 84
    Par défaut
    Merci à tous,

    je n'avait pas compris l'astuce en utilisant nvl et comparer l'objet à lui même si la valeur est null.
    mais je devrai m'en sortir avec ça.

    Et merci pour le lien vers ask Tom. (ou comment réviser son SQL et son anglais en même temps)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. question de débutant sur les threads
    Par Virgile le chat dans le forum Concurrence et multi-thread
    Réponses: 8
    Dernier message: 27/06/2007, 17h10
  2. [C#] question de débutant sur les threads?
    Par Jayceblaster dans le forum C#
    Réponses: 6
    Dernier message: 27/11/2006, 10h52
  3. Réponses: 15
    Dernier message: 15/10/2006, 16h52
  4. question de débutant sur les jointures
    Par dreamcocktail dans le forum Langage SQL
    Réponses: 6
    Dernier message: 27/03/2006, 15h24
  5. question de débutant sur les objets
    Par boucher_emilie dans le forum ASP
    Réponses: 3
    Dernier message: 06/08/2004, 10h51

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