Вопрос

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

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

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

delete from myschema.mytable where id = 555

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

SQL0100W Не найдено ни одной строки для ИЗВЛЕЧЕНИЯ, ОБНОВЛЕНИЯ или УДАЛЕНИЯ;или результатом запроса является пустая таблица.SQLSTATE=02000

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

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

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

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

Это было полезно?

Решение

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

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

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

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

Другие советы

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

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

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

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

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

@потерпевший кораблекрушение

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

@потерпевший кораблекрушение

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top