0

J'ai une procédure Oracle qui utilise une instruction case, et dans le cas une clause WITH.Puis-je utiliser une clause WITH dans une instruction CASE?

Voilà à quoi ça ressemble. J'ai changé les noms et les champs de la table pour ce post.

CREATE OR REPLACE PROCEDURE TST_PROC 
(
    o_Cursor   OUT  SYS_REFCURSOR, 
    p_My_Var   IN  VARCHAR2 
) 
AS 

    v_My_Var  VARCHAR2(200); 

BEGIN 

    v_My_Var  := p_My_Var; 

    CASE v_My_Var 
    WHEN '1' 
    THEN 
     OPEN o_Cursor FOR 

      WITH 
       SQ_Query AS 
       (
       SELECT * from My_Table1 
      ) 
      SELECT * from My_Table2 t2, 
          SQ_Query t1 
      WHERE t1.id = t2.id; 
    WHEN '2' 
    THEN 
     OPEN o_Cursor FOR 

      WITH 
       SQ_Query AS 
       (
       SELECT * from My_Table1 
      ) 
      SELECT * from My_Table2 t2, 
          SQ_Query t1 
      WHERE t1.id = t2.id; 
    END CASE; 
END; 
/

Cela compile dans Oracle sans aucun problème. Mais lorsque j'actualise l'ensemble de données dans SSRS, Visual Studio se plaint. Je me demande si c'est parce que j'utilise une clause WITH dans l'instruction case. Je n'ai pas fait ça avant donc je ne suis pas sûr. Est-ce que quelqu'un sait?

+1

Quelles plaintes ne Visual Studio ont? Quels résultats obtenez-vous lorsque vous exécutez cette procédure directement? –

+0

Cette procédure ne peut PAS compiler, car vous avez confondu les 'expressions SQL-CASE' avec' PL/SQL-CASE STATEMENT'. Ce sont deux choses différentes, leurs syntaxes sont similaires, mais différentes. Veuillez recompiler la procédure, puis exécutez 'SHOW ERRORS' et vous verrez. Astuce: utilisez 'END;' au lieu de 'END CASE;', reportez-vous à ce lien: http://www.techonthenet.com/oracle/functions/case.php – krokodilko

+0

@ShannonSeverance dans Visual Studio, lorsque je clique sur le rafraîchissement Dans la fenêtre Propriétés du jeu de données, j'obtiens la boîte de dialogue Définir les paramètres de requête qui s'ouvre. C'est celui qui apparaît quand il y a une erreur quelque part. – Zolt

Répondre