Bonjour,
Comment pourrais je récupérer la valeur du champ t(i+1) d'un tableau en PL/SQL?
merci
Bonjour,
Comment pourrais je récupérer la valeur du champ t(i+1) d'un tableau en PL/SQL?
merci
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.
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; /
@ 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
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
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; /
Qu'est-ce qu'on cherche à faire dans le bloc ci-dessus par rapport à la question originale qui figure dans l'intitulé du poste?
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; . . .
Il faudrait donc détailler un peu plus le problème.
Cordialement,
Dariyoosh
Ce code me permet de faire un test sur l'indice du tableau et me renvoyer à la sortie:
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; . . .
la valeur du contenu du tableausi non la boucle continuera a me renvoyer la valeur
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i)Tb(i+1)
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i)
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
A ce niveau je veux qu'il m'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i)Tb(i+1)mais il m'affiche
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i) et Tb(i+1).
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i) et Tb(i)
Je voudrais un moyen d'afficher
Code : Sélectionner tout - Visualiser dans une fenêtre à part Tb(i+1)
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
(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/
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/
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 !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager