Форум программистов, компьютерный форум, киберфорум
Oracle
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/398: Рейтинг темы: голосов - 398, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 20.12.2010
Сообщений: 21
1

Ошибка ORA-00904 "Недопустимый идентификатор

25.07.2011, 22:09. Показов 80967. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Привет Всем

Не могу выполнить запрос.
Есть простая таблица test
Oracle 11 SQL
1
2
3
4
5
CREATE TABLE Test
(
 Id INTEGER NOT NULL UNIQUE,
 VALUE INTEGER NOT NULL
)
Делаю запрос, который должен вывести первый ID, начиная с которого сумма нарастающим итогом по столбцу Value превысит 1000.

SQL
1
2
3
4
5
SELECT MIN(ID) FROM
(
  SELECT SUM (VALUE) AS s FROM (SELECT * FROM Test WHERE ID <> 0)
                          WHERE s >1000
)
Ошибка "неверный идентификатор s"

Делаю такой запрос:
SQL
1
SELECT MIN(Test.Id)  FROM Test GROUP BY Test.Id HAVING SUM(Test.Value) > 1000 ORDER BY Id
Правильно ли это?
Извиняюсь если ошибся
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.07.2011, 22:09
Ответы с готовыми решениями:

Ошибка ORA-00904: недопустимый идентификатор
Попыталась реализовать trigger, который добавляет в поле записи(records) + 1 в таблице...

Ошибка ORA - 00904
Доброго времени суток! есть табличка employees. Добавляю к ней столбец salary следующим образом...

ORA-00904: : invalid identifier
Добрый день. Объясните почему возникает ошибка при добавлении записи, пожалуйста. CREATE TABLE...

ORA-00904: "E"."COUNTRY_NAME": invalid identifier; в чём ошибка?
Получить id сотрудника, полное имя (имя и фамилия) сотрудника и название страны, в которой он(а)...

13
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
26.07.2011, 09:14 2
1. в секции WHERE нельзя ссылаться на алиас из списка SELECT, можно только в ORDER BY. Если очень хочется сослаться, надо делать обертку
SQL
1
2
3
4
5
6
SELECT *
FROM
  ( SELECT fld1 AS A
     FROM tab1
  )
WHERE a > 1000
2. Делаю запрос, который должен вывести первый ID, начиная с которого сумма нарастающим итогом по столбцу Value превысит 1000.
SUM сразу просуммирует все значения без всякого нарастающего итога, поэтому ни первый, ни второй вариант неверен. Читай про аналитические функции
0
3 / 3 / 0
Регистрация: 07.06.2011
Сообщений: 17
26.07.2011, 15:05 3
ZeonExpert, а тебе в запросе нужно, чтобы id шли упорядоченно или в соответствии с очередностью записей?
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
26.07.2011, 15:07 4
Цитата Сообщение от rug1976
или в соответствии с очередностью записей?
А это что означает?
0
3 / 3 / 0
Регистрация: 07.06.2011
Сообщений: 17
26.07.2011, 15:10 5
То, что id не первичный ключ, и записи могут идти в порядке, отличном от порядка id.
0
0 / 0 / 0
Регистрация: 20.12.2010
Сообщений: 21
26.07.2011, 15:16  [ТС] 6
rug1976
Нужен первый ID с которого сумма Value привысит например 1000. Необязательно сортировать, главное правильно вывести
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
26.07.2011, 15:21 7
Цитата Сообщение от rug1976
То, что id не первичный ключ, и записи могут идти в порядке, отличном от порядка id.
Если имеется ввиду физическое расположение записей, то оно в общем случае никакого отношения к порядку следования id не имеет. Не зря обычные таблицы имеют еще второе название - heap table.
Более того, без ORDER BY порядок вывода вообще никак не гарантируется, независимо от физического порядка строк в таблице
0
3 / 3 / 0
Регистрация: 07.06.2011
Сообщений: 17
26.07.2011, 15:28 8
Цитата Сообщение от Grossmeister Посмотреть сообщение
Более того, без ORDER BY порядок вывода вообще никак не гарантируется, независимо от физического порядка строк в таблице
Почему?
0
Модератор
4217 / 3058 / 583
Регистрация: 21.01.2011
Сообщений: 13,205
26.07.2011, 15:33 9
Цитата Сообщение от rug1976
Почему?
Потому что алгоритм формирования результата запроса - это внутренняя кухня Oracle, нигде не афишируемая. И вообще в теории реляционных баз нет термина "порядок хранения записей". Это все на усмотрение СУБД. Только ORDER BY заставляет сервер возвращать строки в том порядке, который нужен пользователю
0
3 / 3 / 0
Регистрация: 07.06.2011
Сообщений: 17
26.07.2011, 16:24 10
Цитата Сообщение от ZeonExpert Посмотреть сообщение
rug1976
Нужен первый ID с которого сумма Value привысит например 1000. Необязательно сортировать, главное правильно вывести
Судя по тому, что написал Grossmeister, твоя задача лишается смысла в такой постановке. Что тогда значит "первый"?

Добавлено через 42 минуты
SQL
1
2
3
4
5
6
7
8
9
10
SELECT MIN(qqq.id)
FROM
(
SELECT q1.id
FROM test q1
, test q2
WHERE q1.id >= q2.id
GROUP BY q1.id
HAVING SUM(q2.value) > 1000
) qqq
ZeonExpert, посмотри, может, подойдет такой запрос.
0
58 / 58 / 1
Регистрация: 19.03.2011
Сообщений: 149
26.07.2011, 16:50 11
Цитата Сообщение от rug1976 Посмотреть сообщение
SQL
1
2
3
4
5
6
7
8
9
10
SELECT MIN(qqq.id)
FROM
(
SELECT q1.id
FROM test q1
, test q2
WHERE q1.id >= q2.id
GROUP BY q1.id
HAVING SUM(q2.value) > 1000
) qqq
ZeonExpert, посмотри, может, подойдет такой запрос.
Так считают нарастающую сумму в MS SQL. В Oracle для этого есть возможность задать спецификацию окна аналитической функции.
0
3 / 3 / 0
Регистрация: 07.06.2011
Сообщений: 17
26.07.2011, 16:54 12
Цитата Сообщение от AmKad Посмотреть сообщение
В Oracle для этого есть возможность задать спецификацию окна аналитической функции.
Просвети, please, что это значит?
1
58 / 58 / 1
Регистрация: 19.03.2011
Сообщений: 149
26.07.2011, 17:07 13
Oracle 11 SQL
1
2
3
4
5
WITH s AS
(SELECT LEVEL id, TRUNC(dbms_random.VALUE(1, 10)) v FROM dual CONNECT BY LEVEL <= 10
)
SELECT id, v, SUM(v) over (ORDER BY id) sm
FROM s;
0
0 / 0 / 0
Регистрация: 20.12.2010
Сообщений: 21
26.07.2011, 19:22  [ТС] 14
rug1976
Спасибо
0
26.07.2011, 19:22
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.07.2011, 19:22
Помогаю со студенческими работами здесь

ORA-00904 NEW invalid identifier при добавлении триггера на вставку
Пытаюсь создать триггер, который при добавлении данных будет заносить добавленную троку в другую...

Нет доступа к полям БД внутри подзапроса (ORA-00904: : invalid identifier)
Привет всем! С наступающим Новым годом! Только у меня возникла некоторая задачка по Oracal....

Ошибка при выборке ORA-00972: слишком длинный идентификатор
Использую Oracel9i + asp(OleDB) автоматически генерирую SQL код : str = ' select...

ORA-06502: PL/SQL: ошибка числа или значения ORA-06512: на line 1 Ошибка при обращении к процедуре
Всем привет! получаю выше указанную ошибку при обращении к процедуре, вот на этом шаге create...

Ora-12154 TNS невозможно заданный идентификатор соединения
Доброго времени суток. Знаю, что эта проблема уже не раз здесь обсуждалась. Но ни одно...

Ошибка ORA-00904
ora-00904: &quot;system_a&quot;: invalid identifier ora-00904: &quot;OBJECT_NAME&quot;: invalid identifier Error...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru