2012-12-11 5 views
2

Je voudrais vérifier si le curseur n'a qu'une seule ligne. et le retourner,Réf Curseur Type oracle

--Veuillez voir ma question dans la procédure?

CREATE OR REPLACE PROCEDURE GetInterestRate(p_id IN NUMBER DEFAULT NULL, 
     RC1    IN OUT SYS_REFCURSOR 
    ) 
    .... 


    begin 
     open rc1 for select * from interestRatesTable i join parametersInterest p on 
i.interestName = p.Name 
where i.idinterest = p_id 
and p.Active ='A'; 
    -- I would like to check if cursor have only one row. 
    --- if it has zero row, no result I got to raise an error 
    --- if it has more than one row, I got to raise to many interest rates! 
    -- how can I do this? 
    end; 
+0

Et comment est-il lié à java? –

+0

Je pensais que les développeurs de Java pourraient être familiers avec ce cas. Je retire juste pour être poli ... – theklc

Répondre

2

Je pense que vous devrez exécuter la requête avant d'ouvrir le curseur.

CREATE OR REPLACE PROCEDURE ... 
begin 
    select count(*) 
    into row_found 
    from interestRatesTable i join parametersInterest p ... 
    and rownum = 1; 

    if row_found = 0 then raise ... 
    end if 
    open ... 

end; 
3

Oracle soulèvera les erreurs pour vous, il suffit de sélectionner une valeur dans une rangée Je suppose que vous devriez vraiment attraper l'exception dans un bloc d'exception aussi.

CREATE OR REPLACE PROCEDURE GetInterestRate(p_id IN NUMBER DEFAULT NULL, 
    RC1    IN OUT SYS_REFCURSOR 
) 
.... 

begin 
    select 1 
    into a_value 
    from interestRatesTable i 
    join parametersInterest p ...  

    open rc1 for ...... 
EXCEPTION 
    WHEN NO_DATA_FOUND THEN 
    ..... 
    WHEN TOO_MANY_ROWS THEN 
    ..... 
    WHEN OTHERS THEN 
    ..... 
end;