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