Peut une ligne d'être supprimé par la spécification de ROWNUM dans Oracle 11g?
J'ai certaines valeurs comme ci-dessous:
MYSTRING
--------
Dharshan
Ramalingam
Devid
Je peux sélectionner la ligne spécifique de la valeur à travers ci-dessous requête
select * from ( select mystring , rownum rn FROM teststring )
où rn = 2;
dire le moyen de supprimer cette deuxième ligne donnant la ligne n et de me donner une brève explication . J'ai essayé comme ci-dessous mais sa fonctionne pas....
delete from testring where rownum=2;
- Merci de poster votre SQL, comme le texte, pas les images, et ne postez pas dans TOUTES les CAPITALES!
- Sans l'aide d'un
order by
, votreselect
instruction renvoie un arbitraire ligne. Un tas organisé table est intrinsèquement non-ordonnée. Il serait parfaitement valable pour Oracle pour le retour de l'un des trois lignes. La ligne qui est retournée peut changer au fil du temps pour une variété de raisons. - est sur place, et la conclusion est qu'il n'est pas judicieux de supprimer, après
rownum
, pourquoi avez-vous besoin? Il n'est effectivement pas une mauvaise question! delete from testring where rownum=2;
Votre requête ne sera jamais supprimer des lignes. Un ROWNUM la valeur est affectée à une ligne quand il passe à la prédicat de la phase de la requête, mais avant que la requête ne les opérations de tri ou de regroupement. Aussi, un ROWNUM valeur est incrémentée seulement après il est affecté.- Votre problème avec rownum avoir une explication ici
Vous devez vous connecter pour publier un commentaire.
Votre requête renvoie des lignes au hasard et sans ordre. Un tas organisé table est une table avec des lignes stockées dans aucun ordre particulier. C'est un standard table Oracle.
À Partir D'Oracle documentation,
Votre requête ci-dessus montre que vous ne comprenez pas comment ROWNUM fonctionne.
Votre requête ne sera jamais supprimer des lignes.
Un ROWNUM valeur est affectée à une ligne quand il passe à la prédicat phase de la requête, mais avant que la requête ne les opérations de tri ou de regroupement. Aussi, un ROWNUM valeur est incrémentée seulement après il est affecté, c'est pourquoi la requête suivante ne sera jamais plus d'une ligne:
Parce que
ROWNUM = 2
n'est pas vrai pour la première ligne,ROWNUM
n'avance pas à 2. Donc, pas deROWNUM
valeur n'est jamais être supérieur à 1.Comment utiliser correctement ROWNUM:
Que vous vouliez sélectionner une ligne en fonction de ROWNUM, vous pourriez faire quelque chose comme la pagination:
Elle se passe en trois niveaux:
si vous souhaitez supprimer toutes les lignes à l'exception d'une(juste pour comprendre comment le rownum travaux):
ou, plus simple:
Rownum est un pseudo-colonne.
Le rownum n'est pas attribuée de façon permanente à la ligne. Cela signifie que vous ne pouvez pas construire votre requête sur la base de ce critère.
En revanche, vous pouvez supprimer votre ligne avec
delete from teststring where mystring = 'RAMALINGAM';
J'ai essayé cette Requête, et il fonctionne très bien.
S'il vous plaît suggérer que peut-on améliorer sa performance.
Tout commentaire est apprécié.