web-dev-qa-db-fra.com

Oracle: Obtenez le nombre de lignes dans un curseur lors de l'utilisation d'une déclaration à l'aide de

Dans une procédure Oracle, après avoir ouvert un curseur pour une instruction SELECT, je ne trouve pas une moyenne pour compter le nombre de rangées extraites.

OPEN mycursor FOR
SELECT * FROM TABLE;

-- mycursor%ROWCOUNT is always set to 0, even if the cursor has rows.
IF mycursor%ROWCOUNT = 0
THEN
  <error processing code here>
END IF;

Ceci est attendu, tel que documenté à Site Web de la documentation d'Oracles :

L'instruction open-for-utilisée associe une variable de curseur avec une requête, exécute la requête, identifie le jeu de résultats, positionne le curseur avant la première ligne de la série de résultats puis zéros les rangées Compte traitée conservée par% RowCount .

Ainsi, à l'exception d'une seconde, un nombre de sélection de sélection redondant (*) de la table ', y a-t-il d'autres moyens pour connaître le nombre de lignes dans le curseur?

Edit # 1: Je ne bouge pas après avoir chargé le curseur; Il est renvoyé comme à la procédure d'appel. Cependant, je dois soulever une exception s'il n'y a pas de rangée. Ce sont les spécifications.

1
Hans Deragon

Faites la vérification du rangée après une boucle à travers l'ensemble. Si RowCount restera 0 s'il n'y avait pas de données dans le curseur. Vous pouvez utiliser une construction de boucle comme:

OPEN ....

FOR ... IN mycursor
LOOP
    /* Process data here */
END LOOP:

IF mycursor%ROWCOUNT = 0 ...

CLOSE mycursor;
1
BillThor