0

Ich habe eine Oracle-Prozedur, die eine case-Anweisung verwendet, und innerhalb des Falles ist eine WITH-Klausel.Kann ich eine WITH-Klausel in einer CASE-Anweisung verwenden?

So sieht es aus. Ich habe die Tabellennamen und Felder für diesen Beitrag geändert.

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; 
/

Dies kompiliert in Oracle ohne Probleme. Aber wenn ich den Datensatz in SSRS aktualisiere, beschwert sich Visual Studio. Ich frage mich, ob es ist, weil ich eine WITH-Klausel in der case-Anweisung verwende. Ich habe das vorher nicht gemacht, also bin ich mir nicht sicher. Weiß jemand?

+1

Welche Beschwerden hat Visual Studio haben? Welche Ergebnisse erhalten Sie, wenn Sie diese Prozedur direkt ausführen? –

+0

Diese Prozedur kann NICHT kompiliert werden, weil Sie 'SQL-CASE Ausdrücke 'mit' PL/SQL-CASE STATEMENT' verwechselt haben. Sie sind zwei verschiedene Dinge, ihre Syntax ist ähnlich, aber unterschiedlich. Bitte kompilieren Sie die Prozedur erneut, und führen Sie dann 'SHOW ERRORS' aus und Sie werden sehen. Tipp: Verwenden Sie 'END;' anstelle von 'END CASE;', beziehen Sie sich auf diesen Link: http://www.techonthenet.com/oracle/functions/case.php – krokodilko

+0

@ShannonSeverance in Visual Studio, wenn ich auf die Aktualisierung klicke Wenn Sie im Dataset Properties-Fenster auf die Schaltfläche klicken, wird das Dialogfeld Abfrageparameter definieren geöffnet. Es ist der, der erscheint, wenn irgendwo ein Fehler auftritt. – Zolt

Antwort