7
votes

Obtenir des données de la ligne suivante dans le curseur Oracle

Je bâche l'arbre imbriqué et je dois obtenir des données pour la ligne suivante dans le curseur, en utilisant Oracle. Et j'ai toujours besoin de la ligne actuelle, alors la boucle en boucle n'est pas une solution. Exemple: xxx


0 commentaires

3 Réponses :


2
votes

serait-il préférable de stocker le niveau précédent et d'utiliser cela. quelque chose sur les lignes de xxx


1 commentaires

En fait, je l'ai déjà essayé, cela fonctionne, bien sûr, mais j'ai une structure HTML spéciale, nécessaire par JQuery Plugin, et avec cet arborescence d'approche ne consiste pas correctement.



19
votes

Utiliser des fonctions de plomb et de lag

Lead a la capacité de calculer une expression sur les lignes suivantes (lignes qui vont passer après la ligne actuelle) et renvoyer la valeur à la ligne actuelle . La syntaxe générale de plomb est indiquée ci-dessous:

LEAD (SQL_EXPR, Décalset, par défaut) sur (analytique_clause) sur (analytique_clause)

sql_expr est l'expression à calculer de la Rangée principale.

Décalsets est l'index de la ligne principale relatif à la ligne actuelle.Offset est un entier positif avec défaut 1.

Par défaut est la valeur de retour si les points d'une rangée à l'extérieur de la plage de partition.

La syntaxe du décalage est similaire sauf que le décalage du décalage passe dans les rangées précédentes. xxx


1 commentaires

J'utilise "l'ordre des frères et sœurs par nom" et l'oracle jure. Mais merci de me montrer de telles fonctions.



3
votes

Je l'ai fait de cette façon. Je construis un arbre dans un pas en arrière. Je dois vérifier la première itération.

OPEN emp_cv FOR sql_stmt; 
 LOOP     
 if emp_cv%notfound then
    /*some code*/
    exit;
 end if;
 FETCH emp_cv INTO v_new_level;      
    if not b_first_time then    
      if v_new_level > v_level then
       /*some code*/
      elsif v_new_level < v_level then              
       /*some code*/
      else
       /*code*/
      end if;
    else    
      b_first_time:=false;
    end if;  
      v_level:=v_new_level;    
  END LOOP;
  CLOSE emp_cv;


0 commentaires