Невозможно удалить из базы данных ...? - PullRequest
1 голос
/ 10 сентября 2008

Итак, у меня есть 2 экземпляра базы данных, один для разработки в целом, другой был скопирован из разработки для модульных тестов.

Что-то изменилось в базе данных разработки, которую я не могу понять, и я не знаю, как увидеть, что отличается.

Когда я пытаюсь удалить из определенной таблицы, например:

delete from myschema.mytable where id = 555

Я получаю следующий нормальный ответ из БД модульного тестирования, указывающий, что ни одна строка не была удалена:

SQL0100W Строка не найдена для FETCH, UPDATE или DELETE; или результат запроса - пустая таблица. SQLSTATE = 02000

Однако база данных разработки вообще не удаляется со следующей ошибкой:

DB21034E Команда была обработана как оператор SQL, поскольку она не была допустимой командой процессора командной строки. Во время обработки SQL он вернул: SQL0440N Не найдено авторизованной подпрограммы с именем "=" типа "FUNCTION", имеющей совместимые аргументы. SQLSTATE = 42884

Мое лучшее предположение, что есть какой-то триггер или представление, которое было добавлено или изменено и которое вызывает проблему, но я понятия не имею, как найти проблему ... кто-нибудь имел эту проблему или знает, как ее выяснить в чем корень проблемы?

(обратите внимание, что это база данных DB2)

Ответы [ 7 ]

1 голос
/ 10 сентября 2008

Хм, применяя великого оракула к этому вопросу, я придумал:

http://bytes.com/forum/thread830774.html

Похоже, что у другой таблицы есть внешний ключ, указывающий на проблемный, когда этот FK на другой таблице удаляется, удаление должно работать снова. (Предположительно, вы также можете воссоздать внешний ключ)

Помогает ли это кому-нибудь?

0 голосов
/ 02 октября 2008

Пожалуйста, проверьте 1. ваши аргументы триггеров, процедуры, функции и т. Д. 2. тип данных аргументов.

0 голосов
/ 10 сентября 2008

@ отвергнутым

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

Решение состояло в том, чтобы удалить ограничения внешнего ключа и повторно добавить их.

Еще один пост на эту тему:

http://www.ibm.com/developerworks/forums/thread.jspa?threadID=208277&tstart=-1

Это указывает на то, что проблема связана с повреждением ссылочного ограничения и на самом деле, или предположительно в любом случае, исправлена ​​в более поздней версии db2 V9 (которую мы еще не используем).

Спасибо за помощь!

0 голосов
/ 10 сентября 2008

@ отвергнутым

Выбор с тем же условием «где» работает просто отлично, только не удаляется. Ни runstats, ни таблица reorg не влияют на проблему.

0 голосов
/ 10 сентября 2008

Можете ли вы добавить еще к вашему вопросу? Эта ошибка звучит так, будто синтаксический анализатор оператора sql очень запутался в вашем утверждении. Можете ли вы сделать выбор в этой таблице для строки, где id = 555?

Вы можете попробовать запустить RUNSTATS и REORG TABLE для этой таблицы, они должны сортировать выигрышные таблицы.

0 голосов
/ 10 сентября 2008

Совместим ли тип идентификатора с 555? Или он был изменен на нецелочисленный тип?

Или же аргумент 555 как-то пропадает (например, если вы используете JDBC, и подготовленный оператор не получил свои аргументы перед выполнением запроса)?

0 голосов
/ 10 сентября 2008

У вас может быть открытая транзакция в базе данных dev ..., которая иногда приводит меня в состояние SQL Server

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...