【问题标题】:Assistance with SQL View协助 SQL 视图
【发布时间】:2012-02-19 02:45:56
【问题描述】:

我在使用这个 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

当我说自然数结果时,我的意思是把以 .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。

【问题讨论】:

  • 哈哈哦抱歉忘记添加错误了!

标签: sql oracle view plsql ora-00911


【解决方案1】:

错误消息告诉您问题所在。 看线:3 列: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

【讨论】:

    【解决方案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;
    

    不知道为什么会出现该错误。也许是 % 运算符在 Oracle 中不可用。此链接表明:Fundamentals of PL/SQL。不过似乎有一个MOD() 函数。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-28
      • 2013-10-26
      • 1970-01-01
      • 2014-06-22
      • 1970-01-01
      相关资源
      最近更新 更多