Хорошо, у меня есть вопрос, касающийся проблемы, которая у меня была ранее. Я знаю, как это исправить, но у нас возникают проблемы при попытке воспроизвести ошибку.
У нас есть ряд процедур, которые создают записи на основе других записей. Записи связаны с первичной записью посредством link_id
. В процедуре, которая получает это link_id
, запрос
select @p_link_id = id --of the parent
from table
where thingy_id = (blah)
Теперь в таблице есть несколько строк для действия. Некоторые могут быть отменены. Код, который у меня есть, не исключает отмененные строки в операторе select, поэтому, если есть ранее отмененные строки, эти идентификаторы появятся в select. Всегда будет одна «открытая» запись, которая будет выбрана, если я отключу отмененные строки. (приложение where status != 'C'
)
Это решает эту проблему. Однако мне необходимо иметь возможность воспроизвести проблему в нашей среде разработки.
Я прошел через процесс, в котором я ввел целую кучу данных: открытие, отмена и т. Д., Чтобы попытаться получить этот оператор выбора для возврата неверного идентификатора. Однако всякий раз, когда я запускаю select, идентификаторы располагаются по порядку (сгенерированная последовательность), но в случае, когда произошла эта ошибка, оператор select возвращает то, что кажется первым значением переменной.
Например.
ID Status
1 Cancelled
2 Cancelled
3 Cancelled
4 Open
Учитывая вышеизложенное, если я делаю выбор нужного идентификатора, я хочу получить '4'. При ошибке результат равен 1. Однако, даже если я введу 10 отмененных записей, я все равно получу последнюю в выборке.
В Oracle я знаю, что если вы выбираете переменную и возвращается более одной записи, вы получите ошибку (я думаю). Sybase, очевидно, может назначать несколько значений в переменную без ошибок.
Я думаю, что есть какое-то отношение к тому, как данные выбираются из таблицы, где идентификаторы без порядка сортировки не возвращаются в порядке возрастания, или есть опция dboption, в которой выборка в переменную будет сохранять первое или последнее запрашиваемое значение.
Редактировать: похоже, что мы можем воспроизвести эту ошибку, откатив изменения хранимой процедуры. Тем не менее, процы не идут рядом с этим столбцом link_id. Возможно ли, что изменения в архитектуре базы данных могут привести к поломке индекса или чего-то еще