0

この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

S=7自然数の結果と言うとき、.5 で終わる答えを切り上げるような意味3です2.5

上記のコードを実行しようとすると発生するエラーは

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:

それが違いを生む場合、Oracleサーバーに接続されたsqldeveloperを使用しているため、PL/SQLを使用できます。

4

2 に答える 2

3

エラーメッセージは、問題が何であるかを示しています。Line:3 Column:34 を見てください 無効な文字です

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

私の疑いは、モジュロ演算子を使用しようとしているということです。Oracle PL/SQLを使用しているため、使用する必要がありますmod

Oracle/PLSQLの参照は次のとおりです。 Mod 関数

于 2012-02-19T03:13:02.797 に答える
2

CEIL()orROUND()関数で単純化できると思います:

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

なぜそのエラーが発生するのかわかりません。おそらく%、Oracle で使用できないのは演算子です。このリンクはそう示唆しています: Fundamentals of PL/SQL。機能はあるようMOD()ですが。

于 2012-02-19T03:00:28.313 に答える