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?
Quelles plaintes ne Visual Studio ont? Quels résultats obtenez-vous lorsque vous exécutez cette procédure directement? –
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
@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