好的,我有一个与我之前遇到的问题有关的问题。我知道如何修复它,但我们在尝试重现该错误时遇到了问题。
我们有一系列基于其他记录创建记录的程序。这些记录通过link_id
. 在抓住这个的过程中link_id
,查询是
select @p_link_id = id --of the parent
from table
where thingy_id = (blah)
现在,该活动的表中有多行。有些可以取消。我的代码没有在 select 语句中取消包含取消的行,所以如果以前有取消的行,这些 id 将出现在 select 中。如果我不包括取消的行,总会有一个“打开”记录被选中。(附加where status != 'C'
)
这解决了这个问题。但是,我需要能够在我们的开发环境中重现该问题。
我经历了一个过程,我输入了一大堆数据、打开、取消等,试图让这个 select 语句返回一个无效的 id。但是,每当我运行 select 时,id 都是按顺序排列的(生成的序列),但是在发生此错误的情况下,select 语句将似乎是第一个值返回到变量中。
例如。
ID Status
1 Cancelled
2 Cancelled
3 Cancelled
4 Open
鉴于上述情况,如果我选择我想要的 ID,我想得到“4”。在错误中,结果为 1。但是,即使我输入了 10 条取消的记录,我仍然得到了选择中的最后一条。
在 oracle 中,我知道如果您选择一个变量并返回多条记录,则会出现错误(我认为)。Sybase 显然可以将多个值赋给一个变量而不会出错。
我认为这与如何从表中选择数据有关,其中没有排序顺序的 id 不会按升序返回,或者有一个 dboption,其中选择到变量中将保存第一个或查询的最后一个值。
编辑:看起来我们可以通过回滚存储过程更改来重现此错误。但是,proc 不会靠近此 link_id 列。对数据库架构的更改是否可能会破坏索引或其他内容?