Помощь с SQL View - PullRequest
       36

Помощь с SQL View

0 голосов
/ 19 февраля 2012

У меня небольшие проблемы с этим представлением 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, где S - это themed_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:

Если это имеет значение, я использую sqldeveloper, подключенный к серверу Oracle, чтобы я мог использовать PL / SQL.

Ответы [ 2 ]

3 голосов
/ 19 февраля 2012

Сообщение об ошибке говорит вам, в чем проблема. Посмотрите на строку: 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 голосов
/ 19 февраля 2012

Я думаю, вы можете упростить с помощью функции 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.Эта ссылка предлагает так: Основы PL / SQL .Кажется, есть функция MOD().

...