2017-02-19 2 views
2

Я получаю, что я должен добавить псевдоним со всеми столбцами, и я делаю это, но я все еще получаю ошибку.ORA-00998: должно называть это выражение псевдонимом столбца

CREATE TABLE MENTIONS AS SELECT 
    UM.USER_ID AS U_ID, 
    UM.SCREEN_NAME AS USER_SCREEN_NAME, 
    UM.MENTION_ID AS M_USER_ID, 
    (
     SELECT 
      UI.USER_SCREEN_NAME AS MENTIONED_USER 
     FROM 
      USER_INFO UI 
     WHERE 
      UI.USER_ID = UM.MENTION_ID 
     AND ROWNUM = 1 
    ) 
FROM 
    USER_MENTION UM 

USER_MENTION стол

USER_ID  SCREEN_NAME MENTION_ID 
135846337 irisschrijft  774759032636727300 
50117969 Chjulian   13769472 
14411827 thenriques45  13769472 
26681613 ahenotri  252074645 
26681613 ahenotri   9796472 
158378782 SpringerOpen 9796472 
144241914 Kumarappan  252074645 

User_INFO стол:

USER_ID  USER_SCREEN_NAME 
22553325 jasonesummers 
23435691 QRJAM false 
67421923 inTELEgentMSP 
97393397 knauer0x  
85303739 MarriageTheorem 
3842711  seki  
3036414608 Bayes_Rule 
838677852 BOLIGATOR 

я все еще получаю вышеуказанную ошибку, что я делаю неправильно?

+2

Результат вашего подвыборки не имеет псевдоним. –

+1

Попробуйте переместить MENTIONED_USER только в конце подзапроса? – jarlh

+0

Вы создаете таблицу. Столбец должен иметь имя. –

ответ

7

Поиск Oracle Error Message Manual of the current Oracle version. Здесь упоминается ошибка, но без дополнительной информации.

В таком случае посмотрите вверх Oracle Error Message Manual of version 9i По причинам, я не знаю много сообщений об ошибках имеет описание в руководстве 9i, но не в руководствах более поздних версий. 9i - довольно старая версия, поэтому описание может быть устаревшим. Но он может содержать ценные советы.

ORA-00998 должны назвать это выражение с псевдонимом столбца
Причина: выражение или функция была использована в CREATE VIEW заявление, но не было указано имя соответствующего столбца. Когда выражения или функции используются в представлении, все имена столбцов для представления должны быть явно указаны в инструкции CREATE VIEW.
Действие: Введите имя столбца для каждого столбца в представлении в круглых скобках после имени представления.

У нас нет представления, кроме таблицы, которая была создана при выборе. И фактически последнее выражение списка выбора является выражением без псевдонима. Поэтому попробуйте свое утверждение, используя псевдоним для последнего выражения. Поэтому попробуйте

CREATE TABLE MENTIONS AS SELECT 
    UM.USER_ID AS U_ID, 
    UM.SCREEN_NAME AS USER_SCREEN_NAME, 
    UM.MENTION_ID AS M_USER_ID, 
    (
     SELECT 
      UI.USER_SCREEN_NAME 
     FROM 
      USER_INFO UI 
     WHERE 
      UI.USER_ID = UM.MENTION_ID 
     AND ROWNUM = 1 
    ) AS MENTIONED_USER 
FROM 
    USER_MENTION UM 

Атрибут столбца во внутреннем списке выбора бесполезен и может быть удален.

2

Проблема с вашим запросом заключается в том, что каждый столбец в create table должен иметь имя. Вы считаете, что вы назначаете имя в подвыборке. Тем не менее, это не так.

Подзапрос возвращает значение, а не значение с именем. Итак, AS MENTIONED_USER в вашей версии ничего не делает. Думаю, это немного сложно. Один из способов думать о скалярном подзапросе заключается в том, что это просто другое выражение или вызов функции. Вещи, которые происходят внутри него, не влияют на внешний запрос - за исключением возвращаемого значения.

Правильный синтаксис поставить псевдоним столбца вне подвыборки, не внутри его:

CREATE TABLE MENTIONS AS 
    SELECT UM.USER_ID AS U_ID, UM.SCREEN_NAME AS USER_SCREEN_NAME, UM.MENTION_ID AS M_USER_ID, 
      (SELECT UI.USER_SCREEN_NAME 
      FROM USER_INFO UI 
      WHERE UI.USER_ID = UM.MENTION_ID AND ROWNUM = 1 
      ) AS MENTIONED_USER 
    FROM USER_MENTION UM; 

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

  • Нет связанных вопросов^_^