2015-02-13 5 views
0

Итак, я следил за указаниями, которые мне дали в моей живой лекции слово в слово, а также исследовал это в своем учебнике, и я сделал все (так думаю) правильно, но я продолжаю получать ошибка, на которую я посмотрел, чтобы понять, что это значит, и это не помогло мне вообще, и я работал над ним целый день, поэтому я обращаюсь к вам, ребята, чтобы увидеть, можете ли вы увидеть мою ошибку anywheres в моем кодеУ меня возникли проблемы с моей функцией NVL

Это вопрос, который я пытаюсь выполнить:

Используя таблицу BOOK_CUSTOMER и функцию NVL, создать запрос, который возвращает список, содержащий номер клиента, имя, фамилия , а символы «NOT REFER» RED ", если клиент не был отправлен другим клиентом. Дайте производному столбцу псевдоним REFERRED BY. Не указывайте клиентов, которые были переданы другим клиентам.

МОЙ КОД =

SELECT CutomerID, FirstName, LastName, 
NVL(TO_CHAR(Referred), 'Not Referred')) 
FROM Book_Customer; 

Я также понимаю, что я не закончил весь вопрос. Я просто пытаюсь заставить свой NVL работать первым, а затем перейти к псевдониму и последней части вопроса, потому что я не знаю, как это сделать, но все советы по этому поводу были бы весьма полезными.

+1

У вас есть дополнительная правая скобка перед 'FROM'. –

ответ

0

В вашем тексте SQL есть дополнительный (непревзойденный) закрывающий паз, и это вызовет синтаксическую ошибку.

NVL(TO_CHAR(Referred), 'Not Referred')) 
            ^

В этом последнем парне нет соответствующего начального пара.


Чтобы присвоить псевдоним для выражения в списке выбора, следовать выражение с ключевым словом AS и псевдонимами.

SELECT t.foo AS bar 

результирующего будет содержать столбец с именем bar.

SELECT b.CustomerID 
    , b.FirstName 
    , b.LastName 
    , NVL(TO_CHAR(b.Referred),'Not Referred') AS ReferredBy 
    FROM Book_Customer b 
WHERE b.Referred IS NULL 
+0

Итак, я забрал их) и добавил псевдоним, но у меня все еще есть ошибка, указывающая, что ключевое слово FROM не найдено в нужном месте. Я получаю эту ошибку все время, и я искал ее, и это не дает большой поддержки тому, что мне нужно исправить. Любые идеи, почему мой код не будет работать сейчас, когда все, что я сделал, это добавить простой псевдоним? SELECT CustomerID, FirstName, LastName, NVL (TO_CHAR (Referred), 'Not Referred') AS 'Referred By' FROM Book_Customer; –

+0

У вас есть строковый литерал, в котором вам нужен идентификатор. Неправильно поставить строковый литерал после ключевого слова 'AS'. Идентификаторы * не * заключены в одинарные кавычки, значение, заключенное в одинарные кавычки, интерпретируется как строковый литерал. В Oracle SQL идентификаторы могут быть заключены в двойные кавычки, например. 'AS 'ОТКАЗЫВАЕТСЯ". – spencer7593

+0

Большое спасибо spencer7593! Это сработало. Теперь я застрял в той части, где мне нужно НЕ перечислять ни одного из клиентов, которые были переданы другими клиентами. Я так плохо разбираюсь в словах, и я не могу полностью обернуть свою голову тем, что мне нужно сделать, чтобы это сделать. Я думал о подзапросе, но я даже не знаю, что положить внутрь. Как я уже сказал, я ужасно разбираюсь в проблемах с именами/математикой. –

0

Я, наконец, понял это! Соответствующий код:

SELECT CustomerID, FirstName, LastName, 
NVL(TO_CHAR(Referred), 'Not Referred') AS "Referred By" 
FROM Book_Customer 
WHERE Referred IS NULL; 

Спасибо всем за ваши полезные комментарии, которые помогли мне разобраться в этой проблеме.

+0

Две ноты: 1) включая пробел и специальные символы в идентификаторах разрешены, но это обычная практика * избегать * этого. (В Oracle такой идентификатор должен быть заключен в двойные кавычки, но это также делает регистр чувствительным к регистру.) 2) ссылки на квалификационные столбцы с псевдонимом, назначенным таблице, также являются очень распространенной практикой, когда оператор включает в себя больше чем одна таблица, когда оператор является частью блока PL/SQL. Преимущества этой модели проявляются в более сложных заявлениях, но это шаблон, к которому мы стремимся, даже в простых утверждениях. – spencer7593

+0

Прошу прощения, я в замешательстве, о чем вы говорите, простите меня. Где я сделал пробел? и это так же, как пустое пространство за моими словами? Снова .. очень простой курс ... также вы сказали, что идентификатор должен быть заключен в двойные кавычки, но если вы заключите его в двойные кавычки, тогда вы получите ошибку в SQL plus, вы должны иметь его в одинарных кавычках (I ' я говорю о «Referred», если вы не говорите о чем-то совершенно другом. Спасибо за ваши советы, и я буду помнить их в своем курсе, который заканчивается еще на две недели :) Вы были очень полезны @ spencer7593 –

+0

В имени столбца есть символ пробела ... '' Referred By "'. Символ пространства - это то, почему имя столбца должно быть заключено в двойные кавычки. В SQL идентификатор * - это имя столбца или имя таблицы, вида, функции, процедуры и т. Д. Существуют правила относительно того, что представляет собой действительный идентификатор, какие символы разрешены, максимальная длина и т. Д. В Oracle идентификатор * может быть заключен в двойные кавычки и делает его чувствительным к регистру и позволяет использовать символы, которые иначе не разрешены, например, пробел, тире и др. – spencer7593

Смежные вопросы