Maison >base de données >Oracle >Comment remplacer le rownum dans Oracle

Comment remplacer le rownum dans Oracle

下次还敢
下次还敢original
2024-05-03 00:18:32729parcourir

En plus de la pseudo-colonne ROWNUM d'Oracle, vous pouvez utiliser les alternatives suivantes pour obtenir le numéro de séquence d'une ligne : 1. Sous-requête (en utilisant une sous-requête imbriquée) ; 2. Fonction analytique (telle que ROW_NUMBER()) ; (pour les lignes nouvellement insérées) ; 4. Table temporaire (en créant une table temporaire pour stocker les numéros de ligne).

Comment remplacer le rownum dans Oracle

Utilisez d'autres méthodes pour remplacer ROWNUM dans Oracle

Dans Oracle, la pseudo-colonne ROWNUM est utilisée pour obtenir le numéro de séquence de la ligne dans l'ensemble de résultats. Cependant, il peut y avoir des limitations ou des problèmes de performances lors de l'utilisation de ROWNUM dans certains cas. Vous pouvez donc envisager les alternatives suivantes :

1. Sous-requête

Utilisez une sous-requête imbriquée pour ajouter des numéros de ligne à partir de la requête principale :

<code class="sql">SELECT * FROM (
  SELECT
    row_number() OVER (ORDER BY <sort_column>) AS rownum,
    <columns>
  FROM <table_name>
) AS subquery;</code>

2. Fonction analytique

Utilisez ROW_NUMBER() Fonction analytique Ajouter des numéros de ligne :

<code class="sql">SELECT
  ROW_NUMBER() OVER (ORDER BY <sort_column>) AS rownum,
  <columns>
FROM <table_name>;</code>

3. Séquence

Pour les lignes nouvellement insérées, vous pouvez utiliser une séquence pour générer des numéros de ligne uniques :

<code class="sql">CREATE SEQUENCE rownum_seq START WITH 1;

INSERT INTO <table_name> (id, ..., rownum) VALUES (..., NEXT VALUE FOR rownum_seq);

SELECT
  rownum,
  <columns>
FROM <table_name>;</code>

4. Table temporaire

Créez une table temporaire pour stocker les numéros de ligne :

<code class="sql">CREATE TEMPORARY TABLE rownum_temp (
  rownum NUMBER,
  <columns>
);

INSERT INTO rownum_temp (rownum, <columns>)
SELECT row_number() OVER (ORDER BY <sort_column>), <columns>
FROM <table_name>;

SELECT
  rownum,
  <columns>
FROM rownum_temp
ORDER BY rownum;</code>

. Choisissez la bonne approche

Le choix de la bonne alternative dépend de vos exigences spécifiques et de vos considérations de performances. Les sous-requêtes et les fonctions analytiques sont efficaces pour des ensembles de données relativement petits. Pour les situations où les numéros de ligne doivent être générés lors de l'insertion, les séquences et les tables temporaires sont de meilleurs choix.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn