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)/2where的自然数结果Sthemed_party_size.

当我说自然数结果时,我的意思是把以 0.5 结尾的答案四舍五入,所以如果S=7答案是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 Function

于 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 中没有的运算符。该链接表明:PL/SQL 的基础知识。不过似乎有一个MOD()功能。

于 2012-02-19T03:00:28.313 回答