0

나는 case 문을 사용하는 Oracle 프로 시저를 가지고 있으며, case 내부는 WITH 절입니다.CASE 문에서 WITH 절을 사용할 수 있습니까?

이것은 다음과 같습니다. 이 게시물의 테이블 이름과 필드를 변경했습니다.

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

이는 Oracle에서 아무 문제없이 컴파일됩니다. 그러나 SSRS의 데이터 세트를 새로 고치면 Visual Studio가 불평합니다. 나는 그것이 case 문 안에 WITH 절을 사용하고 있기 때문에 그것이 맞는지 궁금합니다. 나는 전에 이것을 한 적이 없기 때문에 확실하지 않습니다. 아는 사람 있나요?

+1

비주얼 스튜디오는 무엇 불만이 않습니다

여기에서 도움을 얻었다? 이 절차를 직접 실행할 때 어떤 결과가 있습니까? –

+0

'SQL-CASE expressions'을'PL/SQL-CASE STATEMENT'로 혼동했기 때문에이 과정은 컴파일 할 수 없습니다. 그것들은 서로 다른 두 가지이며, 구문은 비슷하지만 다르다. 프로 시저를 다시 컴파일 한 후'SHOW ERRORS'를 실행하면 알 수 있습니다. 팁 : 'END CASE;'대신 'END;'를 사용하십시오. http://www.techonthenet.com/oracle/functions/case.php – krokodilko

+0

Visual Studio에서 @ShannonSeverance를 클릭하면 새로 고침을 클릭합니다. 버튼을 클릭하면 쿼리 매개 변수 정의 대화 상자가 열립니다. 그것은 어딘가에서 오류가있을 때 나타나는 것입니다. – Zolt

답변

관련 문제