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 :

Récupérer la valeur du champ i+1 d'un tableau


Sujet :

PL/SQL Oracle

  1. #1
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut Récupérer la valeur du champ i+1 d'un tableau
    Bonjour,
    Comment pourrais je récupérer la valeur du champ t(i+1) d'un tableau en PL/SQL?
    merci

  2. #2
    Modérateur
    Avatar de al1_24
    Homme Profil pro
    Retraité
    Inscrit en
    Mai 2002
    Messages
    9 080
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2002
    Messages : 9 080
    Points : 30 801
    Points
    30 801
    Par défaut
    La question ne me semble pas très claire.

    Pourrais-tu détailler un peu plus, avec un exemple et un pseudo-code ?
    Modérateur Langage SQL
    Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
    N'oubliez pas le bouton et pensez aux balises
    [code]
    Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
    Aide-toi et le forum t'aidera : Un problème exposé sans mentionner les tentatives de résolution infructueuses peut laisser supposer que le posteur attend qu'on fasse son travail à sa place... et ne donne pas envie d'y répondre.

  3. #3
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par al1_24 Voir le message
    La question ne me semble pas très claire.

    Pourrais-tu détailler un peu plus, avec un exemple et un pseudo-code ?
    J'ai une table b comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    a1
    a2
    a3
    a4
    a5
    ...
    a65
    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
     
    Declare
      Cursor cur is
        select lign from b;
       TYPE Las IS TABLE OF CHAR(6) index by binary_integer;
       Tb Las ;
       i integer:=0;
       j integer:=8;
     
    begin
     
         For n IN cur Loop
          i:=i+1;
                Tb(i):=n.lign;
     
            if i=j then
     
               dbms_output.put_line(trim(Tb(i)||Tb(i+1))) ;
     
                j:=i+7;
     
          else
                   dbms_output.put_line( Tb(i) ) ;
     
          end if;
         End loop ;
     
     
    end;
    /

  4. #4
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    @ SINASOFT

    Ce n'est toujours pas clair. Déjà, pourquoi remplir les cellules de la table associative une par une alors que l'on peut faire de manière plus efficace avec SELECT ... BULK COLLECT INTO ...?

    Un example
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    <<bk>>
    DECLARE
        TYPE empname_tab_ty IS TABLE OF hr.employees.first_name%TYPE INDEX BY BINARY_INTEGER;
        empNamesTab empname_tab_ty;
    BEGIN
        SELECT t1.first_name BULK COLLECT INTO bk.empNamesTab
        FROM   hr.employees t1;
        FOR idx IN bk.empNamesTab.FIRST .. bk.empNamesTab.LAST LOOP
            sys.dbms_output.put_line('first_name = ' || bk.empNamesTab(idx));
        END LOOP;
    END;
    /
    En outre, je ne comprends pas du tout l'intérêt de cette partie dans votre code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    . . .
    IF i=j then
       dbms_output.put_line(trim(Tb(i)||Tb(i+1))) ;
        j:=i+7;
    else
        dbms_output.put_line( Tb(i) ) ;
    end IF;
    . . .
    Qu'est-ce qu'on cherche à faire dans le bloc ci-dessus par rapport à la question originale qui figure dans l'intitulé du poste?

    Il faudrait donc détailler un peu plus le problème.
    Cordialement,
    Dariyoosh

  5. #5
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    . . .
    IF i=j then
       dbms_output.put_line(trim(Tb(i)||Tb(i+1))) ;
        j:=i+7;
    else
        dbms_output.put_line( Tb(i) ) ;
    end IF;
    . . .
    Ce code me permet de faire un test sur l'indice du tableau et me renvoyer à la sortie:
    la valeur du contenu du tableau si non la boucle continuera a me renvoyer la valeur

  6. #6
    Membre averti Avatar de dariyoosh
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    236
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 236
    Points : 334
    Points
    334
    Par défaut
    Oui, d'un point de vue de syntax PL/SQL je comprends qu'est-ce qu'on fait à l'intérieur de cette boucle, mais ce n'est pas ça la question.

    Quel est le rapport de ce code avec la question originale: "Récupérer la valeur du champ i+1 d'un tableau" qui est le titre de ce topic? Qu'est-ce qu'on cherche à obtenir?
    Cordialement,
    Dariyoosh

  7. #7
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par dariyoosh Voir le message
    Oui, d'un point de vue de syntax PL/SQL je comprends qu'est-ce qu'on fait à l'intérieur de cette boucle, mais ce n'est pas ça la question.

    Quel est le rapport de ce code avec la question originale: "Récupérer la valeur du champ i+1 d'un tableau" qui est le titre de ce topic? Qu'est-ce qu'on cherche à obtenir?

    A ce niveau je veux qu'il m'affiche mais il m'affiche .
    Je voudrais un moyen d'afficher

  8. #8
    Membre chevronné
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Février 2012
    Messages
    652
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Distribution

    Informations forums :
    Inscription : Février 2012
    Messages : 652
    Points : 1 878
    Points
    1 878
    Par défaut
    Essayez avec la fonction analytique LEAD pour avoir la valeur suivante sur la ligne courante

  9. #9
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par Scriuiw Voir le message
    Essayez avec la fonction analytique LEAD pour avoir la valeur suivante sur la ligne courante
    En utilisant cette fonction je reçois un message d'erreur:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    dbms_output.put_line(Tb(i)||lead(Tb(i)));
                                          *
    ERREUR à la ligne 15 :
    ORA-06550: Ligne 15, colonne 31 : 
    PLS-00201: l'identificateur 'LEAD' doit être déclaré 
    ORA-06550: Ligne 15, colonne 10 : 
    PL/SQL: Statement ignored

  10. #10
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  11. #11
    Membre à l'essai
    Inscrit en
    Avril 2006
    Messages
    44
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 44
    Points : 18
    Points
    18
    Par défaut
    Ton lien me renvoie sur google alors que je cherche une solution pour message d'erreur.

  12. #12
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Tu colles une fonction dont tu ne connais ni le but, ni le périmètre, ni les arguments en plein milieu de ton PL/SQL. Ca ne marche pas. Normal, non ?

    En réponse, je te dis qu'il y a pas mal de tutos rapides qui t'expliquent ce que veut dire "fonction analytique LEAD" : sur google, en premier lien je vois un tuto justment du site developpez.net :

    http://lalystar.developpez.com/fonctionsAnalytiques/

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  13. #13
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    500
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 500
    Points : 639
    Points
    639
    Par défaut
    On ne peut pas passer une expression calculée du type "i + 1" à l'indice d'un tableau, il faut utiliser la méthode NEXT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dbms_output.put_line(Tb(i)||(Tb(i).next));
    Des chercheurs qui cherchent, on en trouve, mais des chercheurs qui trouvent, on en cherche !

Discussions similaires

  1. [Mysql] Récupérer la valeur du champ autoincrement
    Par Hell dans le forum Requêtes
    Réponses: 4
    Dernier message: 25/10/2006, 11h33
  2. [MySQL] Je veux récupérer la valeur des champs de ma base et je n'ai qu'1 seul caractère
    Par yiuche dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 03/08/2006, 17h05
  3. Récupérer la valeur des champs calculés dans une requète SQL dans vba
    Par FrédéricCM dans le forum Requêtes et SQL.
    Réponses: 12
    Dernier message: 28/06/2006, 16h29
  4. Récupérer les valeurs des champs créés dynamiquement
    Par outlawz dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 03/05/2006, 16h32
  5. récupérer la valeur d´un champ d´une popup
    Par naiadeKaren dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 09/08/2005, 16h04

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