web-dev-qa-db-fra.com

Pourquoi suis-je ora-06592: cas non trouvé lors de l'exécution de la déclaration de cas dans PL / SQL?

J'ai le cas suivant dans pl/sql

        CASE
            WHEN v_line_item.custom_segment = 'CND1' THEN
                v_current_col := v_col_lcy_tps;
            WHEN v_line_item.custom_segment = 'CND2' THEN
                v_current_col := v_col_lcy_ib;
            WHEN v_line_item.custom_segment = 'CND3' THEN
                v_current_col := v_col_lcy_gm;
            WHEN v_line_item.custom_segment = 'CND4' THEN
                v_current_col := v_col_lcy_pb;
            WHEN v_line_item.custom_segment = 'CND5' THEN
                v_current_col := v_col_lcy_bb;
        END CASE;

Le code compile une amende, mais lorsque j'exécute à stocker, je reçois l'erreur suivante:

Ora-06592: cas introuvable lors de l'exécution de la déclaration de cas

Donc quand je supplie le cas; Le processus stocké ne compilera pas. Les seuls exemples que je peux mettre mes mains sur mes mains, utilise le cas dans une instruction SELECT, je ne veux pas l'utiliser dans Sélectionner une instruction, je souhaite définir ma variable sans avoir de tas de désignations.

17
Marthinus

Si vous utilisez une instruction CASE - les annonces sous le CASE - doivent correspondre à toutes les conditions que vous pourriez rencontrer - soit explicitement comme vous l'avez fait en utilisant

WHEN v_line_item.custom_segment = 'CND1' THEN
            v_current_col := v_col_lcy_tps;
WHEN v_line_item.custom_segment = 'CND2' THEN

ou en utilisant la clause ELSE.

Votre code frappe une situation où v_line_item.custom_segment ne correspond pas à aucun des scénarios CASE [$ var], d'où Oracle augmente cette exception.

Vous pourriez ajouter une prise de capture-tout

ELSE
   -- do some work here, raise an exception or log it.

afin qu'il correspond à toutes les conditions.

En plus de lecture:

33
Sathyajith Bhat