У нас есть огромный SQL-скрипт, включающий десятки таблиц, подзапросов, сотни атрибутов. Он отлично работает в тестовой базе данных, но возвращает sql subquery returns more than 1 row
при запуске в производственной базе данных. Сценарий работал отлично до сих пор. Проблема в том, что все, что я получаю, - это однострочная ошибка, указанная выше, без каких-либо указаний, которые точный подзапрос вызывает ошибку, которая делает ее почти невозможной для отладки. Вопрос в том, как я должен знать, какая строка SQL вызывает ошибку? Есть ли способ «отлаживать» его по строкам, как если бы вы сделали это на языке программирования? Я использую TOAD с Oracle 11g.как отлаживать «sqquery subquery возвращает более 1 строки» ошибка
ответ
Добавить print
или DBMS_OUTPUT.PUT_LINE
команды для вашего сценария для печати сообщений. И/или использовать обработчики исключений в скрипте. Возможно, добавьте некоторые переменные, которые подсчитывают или маркируют этот оператор, и выводят его в обработчик исключений.
http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm
После того, как вы нашли запрос, который вызывает проблему, преобразовать его в аналогичный запрос с соответствующим group by
и having count(*) > 1
, так что вы можете увидеть, что данные причиной проблемы. Например, если у вас есть коррелировала подзапрос, который выглядит как:
(select name from names where id=foo.id)
затем написать подобный запрос
select id from names group by id having count(*) > 1
для идентификации данных обижая.
Если у вас есть несколько подзапросов в запросе, который вызывает ошибку, вы можете временно преобразовать подзапросы, чтобы использовать временные таблицы и искать их все для дубликатов.
- 1. java.sql.SQLException: Subquery возвращает более 1 строки
- 2. Subquery возвращает более 1 строку
- 3. Subquery возвращает более 1 строка
- 4. Ошибка MySQL 1242: Subquery возвращает более 1 строки
- 5. Подзапрос возвращает более 1 строки, Ошибка 1242
- 6. Я получаю эту ошибку java.sql.SQLException: Subquery возвращает более 1 строки
- 7. Subquery якобы возвращает более 1 значения
- 8. Mysql :: Ошибка: Подзапрос возвращает более 1 строки:
- 9. MySQL более 1 строки ошибка
- 10. ошибка 1242 подзапрос возвращает более 1 строки
- 11. Почему я получаю Subquery возвращает более 1 строку
- 12. ОШИБКА 1242 (21000): Подзапрос возвращает более 1 строки
- 13. Подзапрос возвращает более 1 строки sql-запроса
- 14. Mysql Сообщение об ошибке: 1242 Subquery возвращает более 1 строка
- 15. «Subquery вернулся более 1 значение» ошибка во время SQL Update
- 16. Подзапрос PHP/MySQL возвращает более 1 строки
- 17. MySQL - Подзапрос возвращает более 1 строки (странный)
- 18. Подзапрос возвращает более 1 строки?
- 19. Подзапрос возвращает более 1 строки
- 20. Mysql Код ошибки: 1242 Subquery возвращает более 1 ряд
- 21. Получение Subquery ошибки возвращает более чем на 1 строку
- 22. Subquery вернулся более чем на 1 строку
- 23. 1242 - Подзапрос возвращает более 1 строки 1
- 24. MYSQL - Ошибка: # 1242 - Подзапрос возвращает более 1 строки
- 25. Как разрешить недействительныеПовторить возвращает более 1 строки
- 26. subquery возвращает более одной ошибки строки в mysql
- 27. Ошибка: subquery Возвращает несколько строк
- 28. Как разрешить это в Mysql (# 1242 - Subquery возвращает более 1 строки)?
- 29. Подзапрос возвращает более 1 значения
- 30. Ошибка утверждения отчета: Subquery возвратил более 1 значения
Поиск '... = (select ...)' местоположений в вашем скрипте. –
Скрипт огромен, я имею в виду огромный. Было бы очень много времени искать каждый подзапрос. Некоторые подзапросы - это взаимосвязанные подзапросы, которые затрудняют их понимание. Предложение select в строке 100 ссылается на таблицу в строке 800, например. Вот почему мне нужно знать, какой подзапрос вызывает ошибку, чтобы я мог ее исправить. Или, по крайней мере, в какой момент выполнения появляется ошибка, которая указывает, какие данные заставляют подзапрос возвращать более одной строки. – Ahmedov
«Он отлично работает в тестовой базе данных»; поэтому здесь есть два варианта. Либо у вас есть проблема с данными в вашей базе данных prod (т. Е. Некоторые отсутствующие ключи и т. Д.), И в этом случае вам нужно это исправить. Проверьте все ограничения на всю таблицу, связанную с этим запросом. Другой вариант заключается в том, что ваша тестовая БД не имела правильных данных, и в этом случае этот запрос неверен и никогда не работал. Самый простой способ отладки такого рода - взять минимальную часть запроса и построить на нем ... продолжать добавлять все больше и больше, пока не нажмете на ошибку. – Ben