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 :

[Oracle 10.2] PL/SQL Paramètre Curseur


Sujet :

PL/SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Par défaut [Oracle 10.2] PL/SQL Paramètre Curseur
    Bonjour,

    j'aimerais savoir si il est possible d'utiliser un paramètre dans un curseur qui me permettent de mofifier la requete :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
       -- Déclaration du curseur
        CURSOR C1 IS
           SELECT MAX(table.champs) AS ch1
           FROM table
     
        lireC1 C1 %ROWTYPE;
    J'aimerais passer en paramètre dans un cuseur une variable qui me permette de changer la fonction MAX en MIN.

    Quelquechose qui ressemblerait à dans l'esprit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     CURSOR C1 (v1 VARCHAR) IS
           SELECT v1(table.champs) AS ch1
           FROM table
     
        lireC1 C1 %ROWTYPE;
    Est-ce possible ?

  2. #2
    Membre Expert

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Par défaut
    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
    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
     
    10g SOC5> create table dvp(n number(6));
     
    Table créée.
     
    10g SOC5> 
    10g SOC5> insert into dvp values(12);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(12);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(120);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(1200);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(12000);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(120000);
     
    1 ligne créée.
     
    10g SOC5> insert into dvp values(120000);
     
    1 ligne créée.
     
    10g SOC5> 
    10g SOC5> declare
      2    cursor lcu(pc_min_max varchar2 default 'min') is
      3      select decode(pc_min_max, 'min', MIN(n),
      4                                'max', MAX(n), '????')
      5      from dvp;
      6    ln_n dvp.n%type;
      7  begin
      8    open lcu;
      9    loop
     10      fetch lcu into ln_n;
     11      exit when lcu%notfound;
     12      dbms_output.put_line('MIN(n) = ' || ln_n);
     13    end loop;
     14    close lcu;
     15  
     16    open lcu('max');
     17    loop
     18      fetch lcu into ln_n;
     19      exit when lcu%notfound;
     20      dbms_output.put_line('MAX(n) = ' || ln_n);
     21    end loop;
     22    close lcu;
     23  end;
     24  /
    MIN(n) = 12
    MAX(n) = 120000
     
    Procédure PL/SQL terminée avec succès.
     
    10g SOC5>
    D'ailleurs dans mon exemple un curseur n'est pas nécessaire puisque pour le MIN comme pour le MAX la requête ne retourne qu'une SEULE ligne.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Par défaut
    La fonction decode ne ralenti pas trop le traitement de la fonction (requête exécuter plusieurs milliers de fois) et j'ai lu qu'elle allai être déprécié.

  4. #4
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    bah... tu peux aussi mettre un CASE WHEN...

    ça c'est toujours d'actualité !

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 71
    Par défaut
    Citation Envoyé par Yorglaa
    bah... tu peux aussi mettre un CASE WHEN...

    ça c'est toujours d'actualité !
    Pas dans un curseur (il attends une requête Select). A moins qu'on puisse mettre le CASE dans le SELECT ?

  6. #6
    Membre émérite Avatar de Yorglaa
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    845
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : Suisse

    Informations forums :
    Inscription : Janvier 2004
    Messages : 845
    Par défaut
    oui bien sûr !
    et même dans la clause where si tu veux...

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

Discussions similaires

  1. [Oracle 8i][PL/SQL] Exceptions & Curseur
    Par Bahan dans le forum Oracle
    Réponses: 3
    Dernier message: 31/08/2006, 16h34
  2. Type de données Oracle 9-10 et SQL Server 2000
    Par fabrice_bruxelles dans le forum Décisions SGBD
    Réponses: 2
    Dernier message: 05/10/2005, 11h21
  3. [Oracle 9.1] Plantage SQL+ à cause d'une requête
    Par ftrifiro dans le forum Oracle
    Réponses: 8
    Dernier message: 04/10/2005, 15h08
  4. [ADO.Net][C#/Oracle] Comment utiliser une requête paramètrée ?
    Par kaboume dans le forum Accès aux données
    Réponses: 4
    Dernier message: 05/07/2005, 14h50
  5. ORACLE / DEVELOPPEMENT WEB / FENETRE SQL
    Par mimi_été dans le forum Oracle
    Réponses: 4
    Dernier message: 15/02/2005, 18h50

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