Oracle Curseur Ref Vs Sélectionnez avec la gestion des exceptions

J'ai un couple de scénarios:

  1. Besoin de lire la valeur d'une colonne de trois tables différentes dans un ordre prédéfini et seulement 1 table a les données
  2. Lire les données de la table table1 si les enregistrements sont présents pour les critères d'autre de lire les données à partir de Table2 pour un critère donné

Dans Des Procédures Stockées Oracle

La façon dont ils sont traités est d'abord à obtenir le nombre pour une requête donnée dans une variable, et si le nombre > 0, puis on exécute la même requête pour lire les données réelles comme dans:

select count(*) from table1 into v_count
if v_count > 0
then
    select data into v_data from table1
end if;

Return v_data

Ceci est fait pour éviter la no_data_found exception, sinon j'aurais besoin de trois gestionnaire d'exception blocs pour attraper le no_data_found exception pour chaque accès à la table.

Actuellement, je suis de réimplémenter cette avec des Curseurs de sorte que j'ai quelque chose comme ceci:

cursor C1 is
    select data from table1;
Open C1
Fetch C1 into v_data
if C1%FOUND
then
    Close C1
    Return v_data
End If

Je voulais savoir lequel est le mieux d'un point de vue des performances-les avec les Curseurs, ou celui qui fait un Select dans une variable et a trois no_data_found blocs d'Exception. Je ne veux pas utiliser les deux étapes de processus de requête que nous avons actuellement.

OriginalL'auteur Dinesh Manne | 2009-04-29