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?
Welche Beschwerden hat Visual Studio haben? Welche Ergebnisse erhalten Sie, wenn Sie diese Prozedur direkt ausführen? –
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
@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