2010-06-11 4 views
1

je déclaration suivante dans l'un de l'oracle SP:comment retourner une valeur par défaut dans le curseur oracle quand rien ne se trouve

OPEN CUR_NUM FOR 
    SELECT RTRIM(LTRIM(num)) as num 
    FROM USER WHERE USER_ID = v_user_id; 

Lorsque le précède ne retourne rien le résultat de SP vient pas de nom de colonne il. Mais j'aimerais que le curseur ait toujours la colonne num avec une valeur par défaut comme NOTHING lorsqu'aucune donnée n'est trouvée.

Est-ce faisable?

+1

En général, ceci est une mauvaise pratique. Il est généralement préférable de manipuler l'ensemble vide que d'utiliser une valeur magique. – APC

Répondre

0

Si vous avez vraiment besoin de le faire, vous pouvez utiliser un UNION pour sélectionner votre rangée factice dans le cas où le user_id n'existe pas:

OPEN CUR_NUM FOR 
    SELECT RTRIM(LTRIM(num)) AS num 
    FROM user WHERE USER_ID = v_user_id 
UNION ALL 
    SELECT 'NOTHING' AS num 
    FROM dual 
    WHERE NOT EXISTS (
    SELECT 1 
    FROM user 
    WHERE user_id = v_user_Id 
    ) 
0

deux choix je pense:

ajouter NVL () autour de la valeur en cas de rangée étant retourné, mais la colonne est nulle,

autrement

ajouter une fonction MIN MAX ou si possible - cela peut forcer une ligne à retourner

0

Si ce bloc de code est utilisé dans une fonction, ce qui suit fonctionnerait comme un charme:

D'abord, définir votre variable de retour

v_ret VARCHAR2(24); 

Maintenant, définissez le curseur CUR_NUM comme instruction de sélection

CURSOR CUR_NUM IS 
SELECT RTRIM(LTRIM(num)) as num 
    FROM USER WHERE USER_ID = v_user_id; 

BEGIN 
OPEN CUR_NUM; 
FETCH CUR_NUM into v_ret; 
CLOSE CUR_NUM; 

RETURN nvl(v_ret,'NOTHING'); 
end; 
Questions connexes