Bonjour,
Comment pourrais je récupérer la valeur du champ t(i+1) d'un tableau en PL/SQL?
merci
Version imprimable
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 ?
J'ai une table b comme suit:
Code:
1
2
3
4
5
6
7
8 a1 a2 a3 a4 a5 ... a65
Code:
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 codeCode:
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:
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.
Ce code me permet de faire un test sur l'indice du tableau et me renvoyer à la sortie:Code:
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 valeurCode:Tb(i)Tb(i+1)
Code: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?
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:
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
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/
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:
1
2 dbms_output.put_line(Tb(i)||(Tb(i).next));