2012-02-19 3 views
0

이 SQL보기에 약간 문제가 있습니다.SQL 지원보기

CREATE OR REPLACE VIEW view_themed_booking AS 
SELECT tb.*,   
     CASE 
     WHEN (tb.themed_party_size % 2) = 0 THEN 
      (tb.themed_party_size-2)/2 
     ELSE ((tb.themed_party_size-2)/2) + 0.5 
     END themed_tables 
    FROM themed_booking tb; 

아무도 도와 줄 수 있습니까? 보기의 끝 부분에 열을 추가하려고합니다. (S-2)/2의 자연수 결과 Sthemed_party_size입니다.

내가 자연수 결과라고 말하면 0.55로 끝나는 응답을 말합니다. 따라서 S=7이면 대답은 3이 아니고 2.5이 아닙니다. 그것이 내가 PL/SQL을 사용할 수 있도록 내가 sqldeveloper 오라클 서버에 연결되어 사용하고 차이를 만드는 경우

나는 시도하고 위의 코드를 실행할 때 내가 오류가

Error starting at line 1 in command: 
CREATE OR REPLACE VIEW view_themed_booking AS 
SELECT tb.*,   
    CASE WHEN (tb.themed_party_size % 2) = 0 
    THEN (tb.themed_party_size-2)/2 
    ELSE ((tb.themed_party_size-2)/2) + 0.5 
    END themed_tables 
FROM themed_booking tb 
Error at Command Line:3 Column:34 
Error report: 
SQL Error: ORA-00911: invalid character 
00911. 00000 - "invalid character" 
*Cause: identifiers may not start with any ASCII character other than 
      letters and numbers. $#_ are also allowed after the first 
      character. Identifiers enclosed by doublequotes may contain 
      any character other than a doublequote. Alternative quotes 
      (q'#...#') cannot use spaces, tabs, or carriage returns as 
      delimiters. For all other contexts, consult the SQL Language 
      Reference Manual. 
*Action: 

입니다.

+0

죄송 오 하하 오류를 추가하는 것을 잊었다입니다! – geekman92

답변

2

나는 당신이 CEIL() 또는 ROUND() 기능을 단순화 할 수 있다고 생각 :

CREATE OR REPLACE VIEW view_themed_booking AS 
SELECT tb.*,   
     ROUND((tb.themed_party_size-2)/2) AS themed_tables 
    FROM themed_booking tb; 

확실하지 왜 당신이 오류가 발생합니다. 아마도 오라클에서는 사용할 수없는 % 연산자 일 것입니다. 이 링크는 이렇게 제안합니다 : Fundamentals of PL/SQL. 그래도 MOD() 기능이있는 것 같습니다.

+0

그게 훌륭해, 훌륭하게 일 했어! 감사! =) – geekman92

3

오류 메시지가 문제의 원인을 알려줍니다. 라인에서 봐 : 3 열 : 그것은 잘못된 문자

CREATE OR REPLACE VIEW view_themed_booking AS 
SELECT tb.*,   
    CASE WHEN (tb.themed_party_size % 2) = 0 
           ^

내 의심을 34 당신이 모듈로 연산자를 사용하려고하는 것입니다. 오라클 PL/SQL을 사용하고 있기 때문에, 당신은 여기 mod

를 사용해야은 참조 Oracle/PLSQL: Mod Function

+0

오, 알았어. 감사! =) – geekman92